2015-01-31 1 views
0

내 app에 주석을 추가하려고합니다. AnyObject에 추가하는 데 문제가 있습니다. 두 항목 (주석 1 개 상세 및 2) 두 번째 주석이 첫 번째 항목을 우선 제외 대상에 추가 할 것 그리고 내가 주석 2.신속한 MapKit 주석

var locations = [AnyObject]() 
    var myAnnotation = MKPointAnnotation() 

    // Annotation 1 Detail 
    myAnnotation.coordinate = CLLocationCoordinate2DMake(-38.219836, 146.246249) 
    myAnnotation.title = "Annotation Pin 1" 
    myAnnotation.subtitle = "Pin 1" 
    locations.append(myAnnotation) 

    // Annotation 2 Detail 
    myAnnotation.coordinate = CLLocationCoordinate2DMake(-37.219836, 146.246249) 
    myAnnotation.title = "Annotation Pin 2" 
    myAnnotation.subtitle = "Pin 2" 
    locations.append(myAnnotation) 
+0

주석과 아무 관련이 없습니다. – matt

답변

1
var myAnnotation = MKPointAnnotation() 
// ... 
locations.append(myAnnotation) 
// ... 
locations.append(myAnnotation) 

에서 같은 세부 사항이 객체에서와 끝까지 첫 번째 줄에서는 하나의 MKPointAnnotation 개체를 만듭니다. MKPointAnnotation은 참조 인스턴스 인 클래스 인스턴스입니다. 따라서 myAnnotation일 때마다 동일한 개체입니다. 배열에 두 개의 참조를 추가하는 것입니다. 그들은 마술처럼 복사되지 않습니다! 그것들은 과 같은 것, 그리고 동일한 것에 대한 두 가지 참조입니다. 여전히 같은 객체를 가리키는 때문에

그래서 후 myAnnotation에 대한 변경 사항은 변화이 첫 번째 참조가 가리키는 것을 처음으로 참조를 추가. 간단한 예 :

class Dog { 
    var name : String = "" 
} 

var arr : [Dog] = [] 

var d = Dog() 
d.name = "Rover" 
arr.append(d) 
d.name = "Fido" 
arr.append(d) // now arr is [{name "Fido"}, {name "Fido"}] 

쉬운 솔루션 : MKPointAnnotation 객체를 만들! 우 ~, 무슨 개념이야! 별도로 구성하고 배열에 별도로 추가하십시오. 문제 해결됨.

class Dog { 
    var name : String = "" 
} 

var arr : [Dog] = [] 

var d = Dog() 
d.name = "Rover" 
arr.append(d) 
d = Dog() // oooh! what a concept! _another_ Dog!!!! 
d.name = "Fido" 
arr.append(d) // now arr is [{name "Rover"}, {name "Fido"}] 
+0

내 새로운 Swift 자습서를 참조하십시오. http://www.apeth.com/swiftBook/ch04.html#_value_types_and_reference_types – matt

+0

감사합니다. Matt. 나는 붙어 있었고 당신의 모범은 의미가 있습니다. 건배. – Dave

관련 문제