我正在重写Swift中的一个Objective-C类,以便对该语言有所了解。在Objective-C中,我的类包含以下方法:
- (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"]];
}
经过对编译器的反复试验,我成功地重写了它,如下所示:
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
的方法签名是
init(actionName: String, payload: Dictionary<String, NSObject>, timestamp: NSDate)
所以我假设问题是我试图传递一个NSDictionary
而不是一个Dictionary<String, NSObject>
。如何在这两种不完全等价的类型之间进行转换?我应该为所有必须与其他Objective-C组件交互的代码使用NSDictionary
吗?
https://stackoverflow.com/questions/24099165
复制相似问题