Map

以过,我们需要将一个数组中的类型转换为另一个类型,是一件非常麻烦的事情。

假定,我们有如下的数据结构。

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 其实并无节省多少代码,但减少一次手动的遍历,也就减少一次出错的机会。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容