这让我困扰了一会儿。为什么我需要这样做来在CKRecord上设置一个对象,这是有原因的吗?为什么我不能在swift中使用CKRecord对象的下标?
task.record?.setObject(task.reference, forKey:ReferenceField)
,而不是这个
task.record?[ReferenceField] = task.reference
从我的文档CKRecord应下标友好
这让我困扰了一会儿。为什么我需要这样做来在CKRecord上设置一个对象,这是有原因的吗?为什么我不能在swift中使用CKRecord对象的下标?
task.record?.setObject(task.reference, forKey:ReferenceField)
,而不是这个
task.record?[ReferenceField] = task.reference
从我的文档CKRecord应下标友好
数组下标只能从Objective-C的阅读,因为它使用objectForKeyedSubscript:
和setObject:forKeyedSubscript:
实施。令人高兴的是,它很容易扩展CKRecord
,让雨燕的下标:
extension CKRecord {
subscript(key: String) -> AnyObject! {
get {
return self.objectForKey(key)
}
set(newValue) {
self.setObject(newValue as CKRecordValue, forKey: key)
}
}
}
NSHipster有a post on Objective-C subscripting如果你想知道更多。我很惊讶斯威夫特不会自动弥补这一点。
这会导致堆栈溢出,请参阅http://stackoverflow.com/q/27159950/27779 – 2014-11-26 22:34:03
@Gregory:这是非常真实的。我想这就是为什么它不是默认下标。也许苹果会在晚些时候以一个本地的CKrecord下标。 – 2015-04-06 21:53:20
它甚至可以说,在头文件: 除了objectForKey:和的setObject:forKey :, 字典式下标(记录[关键]和记录[关键] =值) 可以用来获取和设置值。 – 2014-11-24 15:51:02