2017-11-22 9 views
0

구조체를 작성했습니다.구조체 초기화

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]() 

배열 구조체 필드에 액세스하려고하면 '범위를 벗어남'예외가 발생합니다.

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

변경 방식을 볼 수 재미있다. – Alexander

+0

@Alexander 요소가있는 배열을 만드는 올바른 방법은 무엇입니까? – Vladislav

+0

고정 된 요소 집합이 필요한 경우 (가장 바람직 함), 특정 수의 요소가있는 배열을 사전 할당 한 후 조정 (일반적으로 바람직하지 않음)하거나 새 요소를 추가하는 메서드를 사용하는 경우 배열 리터럴을 사용할 수 있습니다. 'append'와'prepend'와 같습니다. https://developer.apple.com/documentation/swift/array를 읽으십시오. – Alexander

답변

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 유형의 요소가없는 빈 배열을 만듭니다.

0

이없이 요소 배열을 만듭니다 :

var linesHorisontal = [linesHor]() 

[linesHor]는 유형이고 그것의 새로운 인스턴스를 생성 할 ()를 추가합니다. 새로운 배열에는 기본적으로 요소가 없습니다. 첫 번째 요소에 액세스하려고하면 충돌하는 것이 당연합니다.

하나 linesHor 내부 배열을 만드는이 같다 :

var linesHorisontal = [linesHor()] 

[] 리터럴 어레이를 나타내고, 그 안에하는 linesHor()있다. linesHor()linesHor의 새 인스턴스를 만듭니다.

()의 위치를 ​​변경하면 모든 : 당신은 어떤 요소가없는 배열의 첫 번째 요소를 설정하려고 시도하고