這讓我困擾了一會兒。爲什麼我需要這樣做來在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