이것은 잠시 나를 귀찮게했습니다. CKRecord에 객체를 설정해야하는 이유가 있습니까? 대신 내가 CKRecord이 첨자는 오브젝티브 C에서만 사용할 수 있음을신속하게 CKRecord 객체에 subscripting을 사용할 수없는 이유는 무엇입니까?
답변
친화적 첨자해야 할 문서에서 읽은 바로는이
task.record?[ReferenceField] = task.reference
의
task.record?.setObject(task.reference, forKey:ReferenceField)
, 그것은 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 있습니다. 나는 스위프트가 자동으로 그렇게하지 않는다는 것에 놀랐다.
이로 인해 스택 오버플로가 발생합니다 (http://stackoverflow.com/q/27159950/27779 –
참조). @Gregory : 이것은 사실입니다. 나는 이것이 기본적으로 아래 첨자가 아닌 이유라고 생각합니다. 어쩌면 애플이 나중에 CKrecord 네이티브를 붙일지도 모른다. –
그것도 헤더 파일 말한다 objectForKey 외에 :과의 setObject : forKey :, 사전 식 첨자 (레코드 [키]를 기록하는 열쇠 = 값) 얻는 데 사용되는 값을 설정할 수있다 . –