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)
}
}
}
但是,我在 get
和 set
行收到一个错误,内容为:
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)
}
}
}
我正在尝试扩展 CKRecord
class 以允许订阅。为此,我创建了一个名为 CKRecordHelper
的新文件,并完成了:
extension CKRecord {
subscript(key: String) -> AnyObject! {
get {
return self.objectForKey(key)
}
set(newValue) {
self.setObject(newValue as? CKRecordValue, forKey: key)
}
}
}
但是,我在 get
和 set
行收到一个错误,内容为:
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)
}
}
}