2016-11-04 7 views
2

私はSwift 2.3からSwift 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] LETパケット=データ上のエラーを取得しますメンバー '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

"あいまいな参照"エラーは、あなたが下付き文字として使用しようとしている変数が間違ったタイプであることを示しています。

この場合、dataは、NSStringのサブスクリプトが必要な辞書です。 AEnginePacketDataKeyはObjective CコードのNSStringへのポインタとして定義されていますが、何かが割り当てられている場合は表示されません。 dataの添字として使用する前に、実際にNSStringを割り当ててください。

+0

NSStringがアスタリスクに基づくポインタであると仮定しているなら、それはそうではありません。これはObjective Cオブジェクトの宣言方法です。 NSStringポインタは "NSString ** foo" –

+0

@LeeAnnRuckerになります。二重チェックの後、私の答えは正しいと確信しています。 Objective Cのオブジェクト変数は、そのオブジェクトへのポインタです。 'NSString * foo'はNSStringへのポインタです。 'NSString ** foo'はポインタへのポインタになります。 – Robert

関連する問題