2014-12-22 2 views
0

Xcode의 놀이터에서 실행할 수있는 다음과 같은 클래스, 고려 :나는 키 - 값 체인 (KVC)이 화합물 도트 경로에 대한 신속한에서 동작하지 않습니다

import Foundation 
class MyClass : NSObject { 

    var stringProperty:String 
    var integerProperty:Int 
    var linkedInstance:MyClass! 

    init(String string:String, Int int:Int) { 
     stringProperty = string 
     integerProperty = int 
    } 
} 

다음 줄은 예상대로 작동을 .

var myInstance = MyClass(String: "xxx", Int: 32) 
myInstance.valueForKey("stringProperty") 
myInstance.setValue(2, forKey: "integerProperty") 
myInstance.valueForKey("integerProperty") 

var anotherInstance = MyClass(String: "yyy", Int: 33) 
myInstance.linkedInstance = anotherInstance 
myInstance.linkedInstance.integerProperty = 2 

그러나 합성 경로를 통해 KVC를 사용해서 액세스를 시도, 오류 causess

myInstance.valueForKey("linkedInstance.integerProperty") 

"는 실행이 이유 신호 SIGABRT을 중단 하였다." Swift에서 복합 경로를 만들지는 못했지만 Objective-C에서는 잘 작동합니다. 복용량은 선택 사항과 관련이 있습니까? 단순 경로 값은 랩핑 된 값으로 리턴됩니다.

답변

2

는 즉시이

myInstance.valueForKeyPath("linkedInstance.integerProperty") 

당신의 놀이터에 마지막 줄을 변경으로 당신과 함께 많은 더 좋은 재생됩니다.

수업은 다음과 같습니다. valueForKey:valueForKeyPath:을 혼동하지 마십시오! "linkedInstance.integerProperty"이 아니기 때문에 valueForKey("linkedInstance.integerProperty")이라는 표현식은 Swift 또는 Objective-C에서 성공할 수 없습니다. 키는 키입니다. 이는 키 경로입니다.

+0

매우 특정한 경우 성공할 수 있다는주의 사항에 동의합니다. 특히 실제로 키 "@"linkedInstance.integerProperty "를 가진 사전에 적용될 때. 사전은'-valueForKey :'를'-objectForKey :'로 번역합니다. 네가 '절대'라고 말한 것을 제외하고 나는 그것을 제기하지 않을 것이다. :) –

+0

@KenThomases 당신은 저를 압니다. 당신은 제가 그의 물건과 속성에 대한 특정한 배열을 "결코"의미하지 않는다는 것을 완벽하게 잘 알고 있습니다. 요점은 : 그는 이것이 Objective-C에서 작용했다고 말합니다. 나는 말하고있다 : 아니오 그것은 당신이 쓰는 방식이 아닙니다. – matt

+0

고맙습니다. 그렇습니다. 키와 키 경로 사이에 혼란이있었습니다. – Lance