Swift 3.0:对成员“下标”问题的模糊引用

Posted

技术标签:

【中文标题】Swift 3.0:对成员“下标”问题的模糊引用【英文标题】:Swift 3.0 : Ambiguous reference to member 'Subscript' issue 【发布时间】:2016-11-04 04:34:01 【问题描述】:

我在 Swift 2.3 到 Swift 3.0 中遇到了一个不寻常的问题。一旦我将代码从 2.3 转换为 3.0,我就会遇到这个问题:'Ambiguous reference to member '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 
            
        
     

在 let packet = data[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

请帮帮我。

【问题讨论】:

【参考方案1】:

“模糊引用”错误告诉您尝试用作下标的变量类型错误。

在这种情况下,data 是一个期望 NSString 下标的字典。看起来AEnginePacketDataKey 在您的Objective C 代码中被定义为指向NSString 的指针,但是您没有显示在哪里(如果)分配了任何东西。在尝试将其用作data 的下标之前,请确保为它分配了一个实际的NSString

【讨论】:

如果你假设 NSString 是一个基于星号的指针......它不是。这就是声明 Objective C 对象的方式。一个 NSString 指针将是 "NSString **foo" @LeeAnnRucker 经过仔细检查,我很确定我的答案是正确的。 Objective C 中的对象变量是指向其对象的指针。 NSString *foo 是一个指向 NSString 的指针。 NSString **foo 将是一个指向指针的指针。

以上是关于Swift 3.0:对成员“下标”问题的模糊引用的主要内容,如果未能解决你的问题,请参考以下文章

对成员“下标”Swift 3 的模糊引用

在 Swift 中出现错误对成员“下标”的模糊引用

Swift 2 到 Swift 3 迁移:对成员“下标”的模糊引用

使用 FBSDKApplicationDelegate 时对成员“下标”的模糊引用

Xcode 8 中对成员“下标”的模糊引用

使用 Array 而不是 NSArray 时出现错误“对成员下标的模糊引用”