【问题标题】:Why can't I use subscripting on a CKRecord object in swift?为什么我不能快速在 CKRecord 对象上使用下标?
【发布时间】:2014-11-24 15:49:51
【问题描述】:

这困扰了我一段时间。我需要这样做以在 CKRecord 上设置对象吗?

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

而不是这个

task.record?[ReferenceField] = task.reference 

根据我在文档中阅读的内容,CKRecord 应该是下标友好的

【问题讨论】:

  • 它甚至在头文件中说:除了 objectForKey: 和 setObject:forKey: 之外,还可以使用字典式下标(record[key] and record[key] = value)来获取和设置值。

标签: swift cloudkit


【解决方案1】:

该下标仅适用于 Objective-C,因为它是使用 objectForKeyedSubscript:setObject:forKeyedSubscript: 实现的。令人高兴的是,扩展 CKRecord 以允许 Swift 下标很容易:

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。我很惊讶 Swift 并没有自动连接。

【讨论】:

  • 这会导致我的堆栈溢出,请参阅stackoverflow.com/q/27159950/27779
  • @Gregory:这是非常正确的。我想这就是为什么它默认不下标的原因。也许苹果稍后会提供原生 CKrecord 下标。
猜你喜欢
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 2017-10-14
  • 2018-05-14
  • 2018-12-30
  • 2020-04-22
  • 2019-09-12
  • 1970-01-01
相关资源
最近更新 更多