2017-08-03 79 views
0

我正試圖在正在學習的課程中將MKAnnotations保存到項目的核心數據中。創建自定義核心數據到子類MKAnnotation的類?

我已經看過其他學生在github上的代碼,他們都採用了創建一個自定義NSManagedObject類的子類MKAnnotation的相同方法。

var coordinate: CLLocationCoordinate2D { 
    set { 
     ... 
    } 
    get { 
     ... 
    } 
} 

override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) { 
    super.init(entity: entity, insertIntoManagedObjectContext: context) 
} 

init(latitude: Double, longitude: Double, context: NSManagedObjectContext) { 

    super.init(entity: entity!, insertIntoManagedObjectContext: context) 
    self.lat = .... 
} 

我不明白super.inits。

MKAnnotation需要一個座標變量來解釋第一組代碼,這樣纔有意義。

在第二和第三段代碼中,覆蓋init調用super.init的目的是什麼? github上的每個例子都有類似的代碼,所以這是解決這個問題的唯一方法嗎?爲什麼有必要這樣做?

回答

1

首先,MKAnnotation是一個協議,而不是一個類。你不能繼承兩個不同的類,但是你可以擁有一個按你喜歡的方式採用儘可能多的協議的子類。但這與你的班級沒有直接關係。

調用super.init的原因與Core Data沒有直接關係。這更多關於Swift初始化。每個班級至少有一個「指定」初始值設定項。 Swift要求這些類調用它們的超類的指定構造器。 NSManagedObject的指定初始值爲init(entity:, insertIntoManagedObjectContext:),所以任何子類都必須調用來完成初始化。

當涉及到類繼承時,Swift的初始化規則還有更多。如果您的課程未涵蓋您可能需要查看Apple's documentation on the subject

+0

非常感謝,非常感謝 –

相關問題