首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将NSDictionary转换为Swift Dictionary<String,NSObject>?

如何将NSDictionary转换为Swift Dictionary<String,NSObject>?
EN

Stack Overflow用户
提问于 2014-06-08 00:16:12
回答 1查看 16.4K关注 0票数 19

我正在重写Swift中的一个Objective-C类,以便对该语言有所了解。在Objective-C中,我的类包含以下方法:

代码语言:javascript
复制
- (id) initWithCoder:(NSCoder *)aDecoder
{
    return [self initWithActionName:[aDecoder decodeObjectOfClass:[NSString class] forKey:@"actionName"]
                            payload:[aDecoder decodeObjectOfClass:[NSDictionary class] forKey:@"payload"]
                          timestamp:[aDecoder decodeObjectOfClass:[NSDate class] forKey:@"timestamp"]];
}

经过对编译器的反复试验,我成功地重写了它,如下所示:

代码语言:javascript
复制
convenience init(aDecoder: NSCoder) {
    let actionName = aDecoder.decodeObjectOfClass(NSString.self, forKey: "actionName") as NSString
    let payload = aDecoder.decodeObjectOfClass(NSDictionary.self, forKey: "payload") as NSDictionary
    let timestamp = aDecoder.decodeObjectOfClass(NSDate.self, forKey: "timestamp") as NSDate
    self.init(actionName: actionName, payload: payload, timestamp: timestamp)
}

但是,这仍然在最后一行给出了一个错误:“找不到接受所提供参数的init的重载。”init的方法签名是

代码语言:javascript
复制
init(actionName: String, payload: Dictionary<String, NSObject>, timestamp: NSDate)

所以我假设问题是我试图传递一个NSDictionary而不是一个Dictionary<String, NSObject>。如何在这两种不完全等价的类型之间进行转换?我应该为所有必须与其他Objective-C组件交互的代码使用NSDictionary吗?

EN

回答 1

Stack Overflow用户

发布于 2014-06-08 00:24:56

您确定这是init的正确声明吗?参数顺序与您在Objective-C代码中调用的顺序不同。

所以,如果你想要一个精确的重新实现,最后一个调用应该是self.init(actionName: actionName, timestamp: timestamp, payload: payload)。使用错误的参数顺序调用初始化器将导致您得到的错误消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24099165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档