我有一些實現Resource
協議的結構。這定義它們必須具有符合ExtendedInfo
協議的變量extendedInfo
,以便通過init(json: [String: AnyObject]
提供使用json初始化它們的方式。我試圖提供一種方法來動態實例化這些,使用JSON,提供正確類型的ExtendedInfo
並將其分配給結構的extendedInfo
變量。然而,試圖通過他們的dynamicType
Swift動態類型初始化與動態協議類型
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
任何想法傢伙來實例化他們時,我得到一個Argument labels '(json:)' do not match any available overloads
錯誤?由於
太棒了。謝啦! – trundrumbalind
@trundrumbalind高興地幫助:) – Hamish