美文网首页
Swift:闭包和构造函数

Swift:闭包和构造函数

作者: 春暖花已开 | 来源:发表于2019-01-07 15:12 被阅读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)."
        }
    }
    

    相关文章

      网友评论

          本文标题:Swift:闭包和构造函数

          本文链接:https://www.haomeiwen.com/subject/bxpurqtx.html