【问题标题】:Swift 3.0 : Ambiguous reference to member 'Subscript' issueSwift 3.0:对成员“下标”问题的模糊引用
【发布时间】: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

请帮帮我。

【问题讨论】:

    标签: swift3 xcode8 ios10 swift2.3


    【解决方案1】:

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

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

    【讨论】:

    • 如果你假设 NSString 是一个基于星号的指针......它不是。这就是声明 Objective C 对象的方式。一个 NSString 指针将是 "NSString **foo"
    • @LeeAnnRucker 经过仔细检查,我很确定我的答案是正确的。 Objective C 中的对象变量是指向其对象的指针。 NSString *foo 是一个指向 NSString 的指针。 NSString **foo 将是一个指向指针的指针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多