我目前正在使用RealmSwift,在Marin Todorov的教程中,他创建了这样的变量,并且编译器没有抱怨。
但是,每当我尝试自己创建这些变量时,编译器都希望我添加@objc
字
这些是不同的东西还是它们的行为不同?
答案 0 :(得分:2)
该教程写于2016年9月,已经过时了。
过去,如果您有一个暴露于Objective-C的类,那么它的所有成员都会暴露于Objective-C。在Swift 4中,未标记为@objc
的事物不会暴露给Objective-C,无论它是否为@objc
类的成员。
领域需要对您的媒体资源进行动态处理,例如KVO。这就是为什么需要dynamic
的原因。但是dynamic
是Objective-C独有的功能,这就是为什么您需要@objc
的原因。
这也是为什么Realm无法处理Swift可选对象的原因,因为它们不能与Objective-C桥接。您必须使用RealmOptional<T>
。
简而言之,只需在属性中添加@objc
,一切都会好起来的。
答案 1 :(得分:2)
它们是不同的:
@objc
意味着将对象公开给Objective-C运行时dynamic
表示启用对象的键值观察(KVO)。KVO需要Objective-C运行时。
的行为