2016-11-04 2 views
2

스위프트 2.3에서 스위프트 3.0으로 비정상적인 문제가 발생했습니다. 나는 2.3에서 3.0로 코드를 변환하면, 내가이 문제를 점점 오전 : 첨자 ''멤버에 대한 참조가 모호 ',Swift 3.0 : 회원 'Subscript'문제에 대한 모호한 참조

코드은 다음과 같습니다

dynamic func onDataNotification(notification: NSNotification) { 
     var data = notification.userInfo as! Dictionary<NSString, ARoutedMessage> 
     if let packet = data[AEnginePacketDataKey] as? AEngineMessage, 
     currentDevice = self.currentDevice() { 
      if packet.messageId == MessageId.message && currentDevice.isDevice() { 
// Some code 
      } 
     } 
    } 

데이터 [AEnginePacketDataKey]로 =하자 패킷에 오류가 멤버 'Subscript'에 대한 모호한 참조, 왜 이해가 안되나요? 기타 :

// String 
extern NSString *AEnginePacketDataKey; 

//ARoutedMessage Class 
@interface ARoutedMessage : NSObject 
@property NSMutableArray *payloadParameters; 
@end 

//AEngineMessage Class 
@interface AEngineMessage : ARoutedMessage 
@property (readonly)MessageId messageId; 
- (id) initWithMessageId:(MessageId) mId; 
@end 

제발 도와주세요.

답변

2

"모호한 참조"오류는 아래 첨자로 사용하려는 변수가 잘못된 유형이라는 것을 알려줍니다.

이 경우 dataNSString이라는 첨자가 예상되는 사전입니다. AEnginePacketDataKey은 Objective C 코드에서 NSString에 대한 포인터로 정의되어 있지만, 할당 된 항목이있는 경우 표시되지 않습니다. data의 첨자로 사용하기 전에 실제 NSString을 할당해야합니다.

+0

NSString이 별표 (*)를 기반으로 한 포인터라고 가정한다면 ... 그렇지 않습니다. 이것이 Objective C 객체가 선언되는 방법입니다. NSString 포인터는 "NSString ** foo"가 될 것입니다. –

+0

@LeeAnnRucker 두 번 확인한 후, 저는 제 대답이 정확하다고 확신합니다. Objective C의 객체 변수는 객체에 대한 포인터입니다. 'NSString * foo'는 NSString에 대한 포인터입니다. 'NSString ** foo'는 포인터를 가리키는 포인터입니다. – Robert

관련 문제