2014-11-08 11 views
0

I 블록 파라미터와 방법 갖는다 오브젝티브 C 클래스가 또한 오브젝티브 C 메소드의 파라미터 블록의 파라미터의 타입을 변경합니다스위프트

+ (void)getCurrentUserInfoWithToken:(NSString*)token completionHandler:(void (^)(NSDictionary* userData))handler 

을 볼 수있는 바와 같이, 블록에 NSDictionary 매개 변수가 있습니다. 그러나이 메서드를 신속하게 캐스팅하려고하면 오류가 발생합니다. " '[NSObject : AnyObject]'는 'NSDictionary'와 동일하지 않습니다." 여기 내 스위프트 코드입니다 :

ClockfaceAPI.getCurrentUserInfoWithToken(token, completionHandler: { 
      (userData : NSDictionary!) in 
      // block implementation goes here 
}) 

및 I/= 그 해결 방법에 아무 생각이 당신의있는 NSDictionary *가 [NSObject의 : AnyObject]으로 해석됩니다으로

+0

는 [코코아 데이터 형식 작업 코코아 및 목표 - C와 스위프트 사용]의 _Dictionaries_ 섹션을 참조하십시오 WorkingWithCocoaDataTypes.html # // apple_ref/doc/uid/TP40014216-CH6-XID_42),'NSDictionary' 참조가'[NSObject : AnyObject]'Swift 사전으로 바뀌 었음을 설명합니다. DPlusV가 지적했듯이,이 Swift 사전과 Swift 사전 패턴을 NSDictionary 패턴 대신 사용해야합니다. – Rob

답변

1

이, 의미가

당신은 돈 ' 유형을 지정해야합니다. 예 : 단지 userData: NSDictionary!없이 사용한다고해도 문제가 없습니다. Swift는 선언에 따라 유형을 자동으로 추론합니다. (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/ :

ClockFaceAPI.getCurrentUserInfoWithToken(token, completionHandler: { (dict) -> Void in 
    for (k, v) in dict { 
     println(k) 
     println(v) 
    } 
}) 
+1

하지만 그렇게했을 때 dict.objectForKey를 호출하면 [NSObject : AnyObject]에는 해당 메서드가 없습니다./ –

+1

'objectForKey'를 사용하지 마십시오. 예를 들어, 아래 첨자 구문을 사용하십시오. 'dict.objectForKey (key)'대신'dict [key]'를 사용하십시오. – Rob

+0

와우! 둘 다 감사합니다.) –