Swift中的重载方法给出了目标C错误
我正在尝试扩展Swift中的重载方法给出了目标C错误,swift,cloudkit,overloading,Swift,Cloudkit,Overloading,我正在尝试扩展CKRecord类以允许订阅。为此,我创建了一个名为CKRecordHelper的新文件,并完成了以下操作: extension CKRecord { subscript(key: String) -> AnyObject! { get { return self.objectForKey(key) } set(newValue) { self.setObject(newV
CKRecord
类以允许订阅。为此,我创建了一个名为CKRecordHelper
的新文件,并完成了以下操作:
extension CKRecord {
subscript(key: String) -> AnyObject! {
get {
return self.objectForKey(key)
}
set(newValue) {
self.setObject(newValue as? CKRecordValue, forKey: key)
}
}
}
但是,我在get
和set
行上得到一个错误,它显示:
使用Objective-C选择器“objectoForKeyedSubscript:”获取下标与使用同一Objective-C选择器的方法“objectForKeyedSubscript”冲突
我该如何解决这个问题?据我所知,Objective-C不允许方法重载,但我使用的是Swift。最后,我只是希望允许
CKRecord
允许订阅它。使用@nonobjc
属性从ObjC运行时隐藏该方法,这样Swift编译器就不需要担心与ObjC代码的兼容性
extension CKRecord {
@nonobjc subscript(key: String) -> AnyObject! {
get {
return self.objectForKey(key)
}
set(newValue) {
self.setObject(newValue as? CKRecordValue, forKey: key)
}
}
}
使用
@nonobjc
属性从ObjC运行时隐藏该方法,这样Swift编译器就不需要担心与ObjC代码的兼容性
extension CKRecord {
@nonobjc subscript(key: String) -> AnyObject! {
get {
return self.objectForKey(key)
}
set(newValue) {
self.setObject(newValue as? CKRecordValue, forKey: key)
}
}
}
从我在操场上的测试来看,CKRecord已经订阅了从我在操场上的测试来看,CKRecord已经订阅了谢谢先生!谢谢你的帮助,先生!我感谢你的帮助。