2016-11-04 2 views
2

Ich habe ein ungewöhnliches Problem in Swift 2.3 zu Swift 3.0. Sobald ich den Code 2,3-3,0 konvertieren, ich dieses Problem bin immer: "Mehrdeutige Bezug auf Mitglieder Subscript ',Swift 3.0: Mehrdeutiger Verweis auf Mitglied 'Tiefgestellt' Problem

Code:

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 
      } 
     } 
    } 

Erste Fehler auf let Paket = data [AEnginePacketDataKey] als Unklarer Verweis auf Mitglied 'Tiefgestellt', ich verstehe nicht warum? Andere:

// 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 

Bitte helfen Sie mir.

Antwort

2

Der Fehler "mehrdeutige Referenz" weist darauf hin, dass die Variable, die Sie als einen Index verwenden möchten, der falsche Typ ist.

In diesem Fall ist data ein Wörterbuch, das einen NSString Index erwartet. Es sieht aus wie AEnginePacketDataKey ist als ein Zeiger auf eine NSString in Ihrem Objective-C-Code definiert, aber Sie zeigen nicht, wo (wenn) alles zugewiesen ist. Stellen Sie sicher, dass Sie ihm einen tatsächlichen NSString zuweisen, bevor Sie versuchen, es als einen Index von data zu verwenden.

+0

Wenn Sie davon ausgehen, dass NSString ein Zeiger ist, der auf dem Stern basiert ... ist es nicht. So werden Objective-C-Objekte deklariert. Ein NSString-Zeiger wäre "NSString ** foo" –

+0

@LeeAnnRucker Nach doppelter Überprüfung bin ich ziemlich sicher, dass meine Antwort korrekt war. Objektvariablen in Objective C sind Zeiger auf ihre Objekte. 'NSString * foo' ist ein Zeiger auf einen NSString. 'NSString ** foo' wäre ein Zeiger auf einen Zeiger. – Robert

Verwandte Themen