加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift 学习笔记(19)-闭包

发布时间:2020-12-14 06:37:12 所属栏目:百科 来源:网络整理
导读:通过一个数组名称排序的例子,讲解闭包 表达形式 方式一 var names = [ "zhangsan" , "lisi" , "wangwu" , "zhaoliu" ] // 数组的 sort 方法就是一个闭包names.sort { (s1,s2) - Bool in return s1 s2} print (names) 方式二 //返回的是一个 bool 类型的值,大

通过一个数组名称排序的例子,讲解闭包

表达形式

方式一

var names = ["zhangsan","lisi","wangwu","zhaoliu"]
//数组的 sort 方法就是一个闭包

names.sort { (s1,s2) -> Bool in
    return s1 > s2
}
print(names)

方式二

//返回的是一个 bool 类型的值,大于才会返回,如果不成立,就不返回,所以 bool 就可以直接省略了

names.sort { (s1,s2) in
    return s1 < s2
}
print(names)

方式三

// return 也可以省略,单行闭包,单行闭包

names.sort { (s1,s2) in (s1 > s2)
}
print(names)

方式四

// 第四种方式,把参数表达式也省略了$0/$1代表数组中的第0个和第一个元素
names.sort(by: {$0 < $1})
print(names)
//:## 自己创建一个闭包--闭包表达式,其实闭包很像一个匿名函数

//{(参数列表)->返回值类型 in
//    // 闭包实现代码
//    return
//}

var c1 = {(a:String,b:String)->String  in

    return a + b;

}
// 用 d 来接受闭包的返回值
let d = c1("name","wagn")
print("name = (d)")

在函数中使用闭包

// 声明一个函数,传参数的时候,传一个闭包进去,看一下上面 c1 的闭包类型,把闭包的类型放进去
func pinjieSting(str1:String,str2:String,bibao :((String,String)->String)) -> String{
    // 实现 让闭包来做,直接调用闭包
    return bibao(str1,str2)
}

// 调用函数的时候就发现有点不一样了,整个函数的实现是由一个闭包实现的,跟在参数列表的后面
// 这种情况为 尾随闭包(写参数的时候,如果最后一个参数是闭包,直接敲回车,就会自动扩展出来)
pinjieSting(str1: "name",str2: "wang") { (str1,str2) -> String in
    return str1 + str2

}
// 写参数的时候自己写,不要敲回车
// 非尾随闭包
pinjieSting(str1:"明天是",str2: "星期五",bibao: {(str1,str2)->String in
    return str1 + str2
})

// 把闭包的参数标签删掉,把括号调整下,就变成尾随闭包了,其实是一个东西,只不过语法上略有不用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读