• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift-7-闭包

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
// Playground - noun: a place where people can play

import UIKit

// swift 中闭包与C和OC中的blocks比较相似
// 1. 利用上下文推断参数和返回值类型 2. 单表达式闭包可以省略return关键字 3. 参数名称简写 4. Trailing闭包语法
// 闭包表达式 in 表示 参数及返回值 已经表达完毕,后面是包体
/**
    {(parmeters) -> return type in 
        statements
    }
*/

var names = ["Anna", "Alex", "Ewa", "Barry", "Daniella"]
sorted(names, { (s1 : String, s2 : String) -> Bool in
    return s1 > s2 // 单表达式闭包可以省略return关键字 此处的return可以省略
})

// 从上下文推断类型
// 当闭包作为参数方法参数使用时,因为方法内的参数已经有类型了(String, String) -> Bool ,swift可以从上下文推断出该闭包的参数与返回值,因此闭包的参数和返回值可以省略
sorted(names, { s1, s2 in
    return s1 > s2
})

// 参数名简写 使用 $ + 数字 引用推断出的参数 0 表示第一个
sorted(names, {return $0 > $1}) // 这里官方文档说return可以省略,但是Xcode一直报错说有歧义 解决办法 {$0 as String > $1 as String} 明确声明$0 $1为String即可

// swift 中对于 string  >方法表示接收2个String类型的参数,返回一个Bool值,刚好和闭包吻合,可以直接传入
sorted(names, >)

// Trailing Cloures 使用情景:如果你使用了一个闭包作为一个方法的最后一个参数并且闭包很长
func someFunctionTakesCloures(cloures : () -> ()) {
    println("do some thing")
}

// 不使用trailing cloures调用
someFunctionTakesCloures({
    // 这里实现闭包
})

// 使用trailing cloures
someFunctionTakesCloures() {
    // 这里实现闭包
}

// 如果闭包是该方法的唯一参数并且你使用了trailing cloures,调用方法时可以省略 ()
someFunctionTakesCloures {
    // 这里实现闭包
}

// 使用trailing cloures调用sorted方法
sorted(names) {return $0 > $1}

// 捕获值
func makeInCrementor(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0
    func incrementor() -> Int {
        runningTotal += amount
        return runningTotal
    }
    return incrementor
}
// 方法 incrementor 没有参数,但是它可以从上下文中捕获变量使用

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift Internal Parameter and External Parameter 外部参数和内部参数发布时间:2022-07-13
下一篇:
swift相关文档发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap