以过,我们需要将一个数组中的类型转换为另一个类型,是一件非常麻烦的事情。
假定,我们有如下的数据结构。
class Student {
enum SchoolLevel {
case Primary;
case PrimaryMiddle;
case HighMiddle;
case HighSchool;
static func level(age: Int) -> SchoolLevel {
if age < 12 {
return .Primary
}
else if age < 15 {
return .PrimaryMiddle
}
else if age < 18 {
return .HighMiddle
}
else {
return .HighSchool
}
}
}
let name: String
let schoolLevel: SchoolLevel
init(item: Child) {
self.name = item.name
self.schoolLevel = SchoolLevel.level(item.age)
}
}
class Child {
let name: String
let age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
假定我们有一个数组包含有数个 Child 元素
let children = [
Child(name: "Pony", age: 8),
Child(name: "Jack", age: 13),
Child(name: "Leros", age: 18),
]
不使用map时,我们需要以下的代码完成转换工作。
var students: [Student] = []
for child in children {
students.append(Student(item: child))
}
但使用map时,只需要指定返回值类型即可,同时students数组还可以是不可变的。
let students = children.map { (childItem) -> Student in
return Student(item: childItem)
}
使用 map 其实并无节省多少代码,但减少一次手动的遍历,也就减少一次出错的机会。