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 2 到 Swift 3 迁移:对成员“下标”的模糊引用