为什么我不能在swift中对CKRecord对象使用下标?

时间:2014-11-24 15:49:51

标签: swift cloudkit

这让我困扰了一会儿。有没有理由我需要这样做才能在CKRecord上设置一个对象。

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

而不是

task.record?[ReferenceField] = task.reference 

从我在文档中看到的CKRecord应该是下标友好

1 个答案:

答案 0 :(得分:4)

该订阅只能从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。我很惊讶斯威夫特并没有自动弥合这一点。