Swift:闭包和构造函数

2019-01-07  本文已影响43人  春暖花已开

闭包

与OC的block类似,主要用于异步操作执行完毕后的代码回调,网络访问结果以参数的形式传递给调用方。

闭包表达式语法:
闭包表达式语法有如下一般形式

{ (parameters) -> returnType in

    statements

}
闭包的几种写法:
let closure = {
    print("hello with closure")
}
let closure = { (a: Int, b: Int) -> Int in
    return a + b
}
闭包的几种使用场景:
func hasAnyMatch(list: [Int], condition:(Int) -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}

func lessThanTen(number: Int) -> Bool {
    return number < 10
}

// 或
//let lessThanTen = { (number: Int) -> Bool in
//    return number > 10
//}

hasAnyMatch(list: [17, 20, 18, 19], condition: lessThanTen)
func closureAsReturnTypeFunc(a: Int, b: Int) -> (Int) -> String {
    let result = a + b
    return { (c) in
        return String(result + c)
    }
}
closureAsReturnTypeFunc(a: 10, b: 11)(4)

构造函数

注意:类在创建实例时,必须为所有存储型属性设置合适的初始值。存储型属性的值不能处于一个未知的状态。可以在构造器中为存储型属性赋初值,也可以在定义属性时为其设置默认值。

class Shape {
    var numberOfSides: Int = 0
    var name: String
    init(name: String) {
        self.name = name
    }
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

子类构造:

  • 设置子类声明的属性值
  • 调用父类的构造器
  • 改变父类定义的属性值。其他的工作比如调用方法、getters 和 setters 也可以在这个阶段完成。
class Square: Shape {
    var sideLength: Double
    init(sideLength: Double, name: String) {
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 4
    }
    func area() ->  Double {
        return sideLength * sideLength
    }
    override func simpleDescription() -> String {
        return "A square with sides of length \(sideLength)."
    }
}
上一篇 下一篇

猜你喜欢

热点阅读