2017-08-03 78 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

非常感谢,非常感谢 –

相关问题