因此,我将 Realm 与 Swift 结合使用,并使用 @objcMembers 关键字标记我的类,但是当我尝试创建一些私有变量时,Xcode 强制我在这些私有变量旁边添加 @objc。这是有意的行为吗?看来这对我来说是多余的。
@objcMembers class MyObject: Object {
@objc dynamic private var text: String = String()
@objc dynamic private var youtubeLink: String = String()
@objc dynamic private var count: Int = 0
dynamic var isFavorite: Bool = false
dynamic var currentCount: Int = 0
}
问题是,虽然@objMembers
让您的成员接触 Objective-C,private
再次隐藏它们。因此,要撤销隐藏,你必须说@objc
明确地。
要验证这是真的,请尝试以下测试:
@objcMembers class MyObject: NSObject {
func f() {
print("howdy")
}
}
let c = MyObject()
c.perform(Selector("f"))
这样可行。但这会崩溃:
@objcMembers class MyObject: NSObject {
private func f() {
print("howdy")
}
}
let c = MyObject()
c.perform(Selector("f"))
修复崩溃而不删除private
,我们必须暴露f
显式地传递给 Objective-C:
@objcMembers class MyObject: NSObject {
@objc private func f() {
print("howdy")
}
}
let c = MyObject()
c.perform(Selector("f"))
关于您的特定情况唯一有趣的事情是编译器noticed问题,而不是像上面第二个例子那样让你崩溃。那是因为dynamic
标记,除非我们接触过 Objective-C,否则这是没有意义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)