2016-11-04 79 views
2

我在swift 3.0的swift 2.3中遇到了一個不尋常的問題。有一次,我的代碼轉換,從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]作爲模糊引用成員'下標',我不明白爲什麼?其他:

// 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被定義爲指向您的目標C代碼中NSString的指針,但是您不會顯示任何分配給它的位置(如果)。在嘗試將其用作data的下標之前,請確保將其分配給實際NSString

+0

如果你假設NSString是一個基於星號的指針......它不是。這就是Objective C對象的聲明。一個NSString指針將是「NSString ** foo」 –

+0

@LeeAnnRucker經過雙重檢查,我很確定我的答案是正確的。 Objective C中的對象變量是指向它們對象的指針。 'NSString * foo'是一個指向NSString的指針。 'NSString ** foo'將是一個指向指針的指針。 – Robert

相關問題