考虑下面的代码:
typealias PersonRecord = [String : AnyObject]
struct Person {
let name: String
let age: Int
public init(name: String, age: Int) {
self.name = name
self.age = age
}
}
extension Person {
init?(record : PersonRecord) {
guard let name = record["name"] as? String,
let age = record["age"] as? Int else {
return nil
}
self.name = name
self.age = age
}
}
现在,我想创建数组Person
从一个数组S Record
S:
let records = // load file from bundle
let persons = records.flatMap(Person.init)
但我得到以下错误:
error: ambiguous reference to member 'init(name:age:)'
如果我移动failable initializer
了扩展的,我仍然得到同样的错误。
缺少什么我在这里,这是不是一个正确的用法flatMap
?
编辑 -解决:
发现错误:在记录读取的代码从磁盘文件,返回的错误类型。 一旦我固定的,错误就走开了。