【发布时间】:2016-08-17 09:22:58
【问题描述】:
我有许多实现Resource 协议的结构。这定义了它们必须有一个变量extendedInfo,它符合ExtendedInfo 协议,以提供一种通过init(json: [String: AnyObject] 用json 初始化它们的方法。我试图提供一种使用 JSON 动态实例化这些的方法,提供正确的 ExtendedInfo 类型并将其分配给结构的 extendedInfo 变量。但是,当我尝试通过他们的 dynamicType 实例化它们时,我遇到了 Argument labels '(json:)' do not match any available overloads 错误
protocol Resource {
associatedtype ExtendedInfoTypeAlias: ExtendedInfo
var extendedInfo: ExtendedInfoTypeAlias? { get set }
}
protocol ExtendedInfo {
init(json: [String: AnyObject])
}
struct User: Resource {
typealias ExtendedInfoTypeAlias = UserExtendedInfo
let name: String = "Name"
var extendedInfo: UserExtendedInfo?
}
struct UserExtendedInfo: ExtendedInfo {
let age: Int?
init(json: [String: AnyObject]) {
age = json["age"] as? Int
}
}
let user = User()
let sampleJSON = ["age": 50]
let userExtendedInfo = user.extendedInfo.dynamicType.init(json: sampleJSON) // Argument labels '(json:)' do not match any available overloads
user.extendedInfo = userExtendedInfo
有什么想法吗?谢谢
【问题讨论】:
标签: swift struct protocols dynamictype associated-types