这让我困扰了一会儿。有没有理由我需要这样做才能在CKRecord上设置一个对象。
task.record?.setObject(task.reference, forKey:ReferenceField)
而不是
task.record?[ReferenceField] = task.reference
从我在文档中看到的CKRecord应该是下标友好
答案 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。我很惊讶斯威夫特并没有自动弥合这一点。