我试图扩展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:'与方法&objectForKeyedSubscript'冲突使用相同的Objective-C选择器。
我该如何解决这个问题?根据我的理解,Objective-C不允许方法重载,但我使用的是Swift。最后,我只是想让CKRecord
允许下载。
答案 0 :(得分:2)
使用@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)
}
}
}