为什么我们在fetchRequest()声明之前放置@nonobjc属性?

时间:2017-11-17 14:01:39

标签: ios swift core-data

我正在声明像这样的通常的managedobject类

 public extension Camper {
 @nonobjc class func fetchRequest() -> NSFetchRequest<Camper> {
  return NSFetchRequest<Camper>(entityName: "Camper")
}

@NSManaged var fullName: String?
@NSManaged var phoneNumber: String?
@NSManaged var reservations: Reservation?

} 

我对这个具体情况中@nonobjc属性的意图感到困惑。

1 个答案:

答案 0 :(得分:1)

通常,您会使用@nonobjc注释来解决这会产生的循环依赖性问题。 例如,你在swift中定义一些东西,它使用objc中定义的东西,它使用了这个&#34;某些东西&#34;从快速再次。 这不起作用,因为您需要将objc中的桥接头导入swift,反之亦然。如果您不提供此@nonobjc注释,则编译器无法解决此问题。

请参阅Apple的文档,了解如何使用@objc和@nonobjc:https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html