我写了结构。
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
答案 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
的新实例。
有趣的是看到()
的位置改变如何改变一切:)