Consider the following code:
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
}
}
Now I want to create an array of Person
s from an array of Record
s:
let records = // load file from bundle
let persons = records.flatMap(Person.init)
But I get the following error:
error: ambiguous reference to member 'init(name:age:)'
If I move the failable initializer
out of the extension, I still get the same error.
What am I missing here, is this not a correct usage of flatMap
?
EDIT - solved:
Found the error: the code that read in the records file from disk, returned the wrong type. Once I fixed that, the error went away.