2014-11-24 3 views
4

이것은 잠시 나를 귀찮게했습니다. CKRecord에 객체를 설정해야하는 이유가 있습니까? 대신 내가 CKRecord이 첨자는 오브젝티브 C에서만 사용할 수 있음을신속하게 CKRecord 객체에 subscripting을 사용할 수없는 이유는 무엇입니까?

+0

그것도 헤더 파일 말한다 objectForKey 외에 :과의 setObject : forKey :, 사전 식 첨자 (레코드 [키]를 기록하는 열쇠 = 값) 얻는 데 사용되는 값을 설정할 수있다 . –

답변

4

친화적 첨자해야 할 문서에서 읽은 바로는이

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 있습니다. 나는 스위프트가 자동으로 그렇게하지 않는다는 것에 놀랐다.

+1

이로 인해 스택 오버플로가 발생합니다 (http://stackoverflow.com/q/27159950/27779 –

+0

참조). @Gregory : 이것은 사실입니다. 나는 이것이 기본적으로 아래 첨자가 아닌 이유라고 생각합니다. 어쩌면 애플이 나중에 CKrecord 네이티브를 붙일지도 모른다. –