Swift中的重载方法给出了Objective C错误

时间:2016-06-20 23:41:29

标签: swift cloudkit overloading

我试图扩展CKRecord类以允许下标。为此,我创建了一个名为CKRecordHelper的新文件,并完成了:

extension CKRecord {
    subscript(key: String) -> AnyObject! {
        get {
            return self.objectForKey(key)
        }
        set(newValue) {
            self.setObject(newValue as? CKRecordValue, forKey: key)
        }
    }
}

但是,我在getset行上收到了错误消息:

  

下标获得Objective-C选择器' objectoForKeyedSubscript:'与方法&objectForKeyedSubscript'冲突使用相同的Objective-C选择器。

我该如何解决这个问题?根据我的理解,Objective-C不允许方法重载,但我使用的是Swift。最后,我只是想让CKRecord允许下载。

1 个答案:

答案 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)
        }
    }
}