美文网首页
swift-闭包

swift-闭包

作者: malgee | 来源:发表于2018-03-22 15:43 被阅读3次

    闭包 block, 函数, 匿名函数 (闭包和函数都是引用类型,能改变
    (值类型不能改变

    // 生成一个随机的数组
    let value = arc4random()%1000
    var array: [Int] = []
    for _ in 0..<10 {
        let value = Int(arc4random()%1000)
        array.append(value)
    }
    
    // 自定义排序
    func approach (num1: Int, num2: Int) -> Bool
    {
        return abs(Int32(num1 - 500)) < abs(Int32(num2 - 500))
    }
    
    // 传入排序函数
    array.sort(by: approach) 
    

    对上面的传的函数进行改造, 传入闭包(匿名函数)

    
    // 这里的逻辑处理和上面的效果一样
    array.sort(by: {(num1: Int, num2: Int) -> Bool in
    
         return abs(Int32(num1 - 500)) < abs(Int32(num2 - 500))
    })
    

    闭包简化

    array.sort(by:{(a: Int, b: Int) -> Bool in 
            
          return a > b
    })
    
    array.sort(by:{(a: Int, b: Int) -> Bool in return a > b})
    
    array.sort(by:{a, b in return a > b})
    
    array.sort(by:{a, b in a > b})
    
    array.sort(by:{$0 > $1})
    
    array.sort(by:>)
    

    结尾闭包

    结尾闭包是一个函数要传入的参数的最后一个参数的时候, 闭包可以提到()外面去, 相应的参数也就没有意义,可以省略
    () 可以不包含闭包内容, 也可以省略

    array.sort(){a, b in return a > b}
    
    array.sort{a, b in return a > b}
    
    

    内容捕获

    捕获到闭包外面的 num 值,函数无法实现捕获

    var num = 500
    array.sort(by:{(a: Int, b: Int) -> Bool in
    
         return abs(Int32(a - num)) < abs(Int32(b - num))
    })
    
    

    相关文章

      网友评论

          本文标题:swift-闭包

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