2014-11-24 22 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

相关问题