2014-11-24 26 views
4

這讓我困擾了一會兒。爲什麼我需要這樣做來在CKRecord上設置一個對象,這是有原因的嗎?爲什麼我不能在swift中使用CKRecord對象的下標?

task.record?.setObject(task.reference, forKey:ReferenceField) 

,而不是這個

task.record?[ReferenceField] = task.reference 

從我的文檔CKRecord應下標友好

+0

它甚至可以說,在頭文件: 除了objectForKey:和的setObject:forKey :, 字典式下標(記錄[關鍵]和記錄[關鍵] =值) 可以用來獲取和設置值。 – 2014-11-24 15:51:02

回答

4

數組下標只能從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如果你想知道更多。我很驚訝斯威夫特不會自動彌補這一點。

+1

這會導致堆棧溢出,請參閱http://stackoverflow.com/q/27159950/27779 – 2014-11-26 22:34:03

+0

@Gregory:這是非常真實的。我想這就是爲什麼它不是默認下標。也許蘋果會在晚些時候以一個本地的CKrecord下標。 – 2015-04-06 21:53:20

相關問題