初始化struct

时间:2017-11-22 17:57:11

标签: ios swift xcode

我写了结构。

struct linesHor
{
    var line = CAShapeLayer()
    var linePath = UIBezierPath()
    var beginX : CGFloat
    var endX : CGFloat
    var lastY : CGFloat
    var point1 = CGPoint.zero
    var point2 = CGPoint.zero
    init(){
        beginX = 0
        endX = 0
        lastY = 0
    }
}

我已经制作了这个结构的数组。

var linesHorisontal = [linesHor]()

当我尝试访问数组的struct字段时,我会超出范围'异常。

linesHorisontal[0].point1 = CGPoint(x: 0, y: self.view.frame.height/2)
linesHorisontal[0].beginX = 0

2 个答案:

答案 0 :(得分:0)

看起来你可能还没有向你的数组中添加任何元素,因此你的索引超出界限。您已创建类型为linesHor的数组,但现在需要使用值填充它。

这有效:

var linesHorisontal = [linesHor]()
var lh = linesHor()
linesHorisontal.append(lh)

linesHorisontal[0].point1 = CGPoint(x: 0, y: 0)
linesHorisontal[0].beginX = 0

var linesHorisontal = [linesHor()]

linesHorisontal[0].point1 = CGPoint(x: 0, y: 0)
linesHorisontal[0].beginX = 0

第二个示例创建结构,然后将其放在数组的第一个位置。第一个示例创建一个空数组,其中没有linesHor类型的元素。

答案 1 :(得分:0)

这会创建一个没有元素的数组:

var linesHorisontal = [linesHor]()

[linesHor]是类型,您添加()以创建它的新实例。默认情况下,新数组没有元素。当您尝试访问第一个元素时,它很自然会崩溃。

要在内部创建一个linesHor的数组,请执行以下操作:

var linesHorisontal = [linesHor()]

[]表示数组文字,在其中,有一个linesHor()linesHor()创建了linesHor的新实例。

有趣的是看到()的位置改变如何改变一切:)