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

Overloading Method in Swift Gives Objective C error

我正在尝试扩展 CKRecord class 以允许订阅。为此,我创建了一个名为 CKRecordHelper 的新文件,并完成了:

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

但是,我在 getset 行收到一个错误,内容为:

Subscript getting with Objective-C selector 'objectoForKeyedSubscript:' conflicts with method 'objectForKeyedSubscript' with the same Objective-C selector.

我该如何解决这个问题?据我了解,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)
        }
    }
}