swift学习-闭包

2020-03-16  本文已影响0人  男人宫
//闭包
/*闭包格式
 {(参数名: 参数类型) in
      闭包主体
 }
*/
let 闭包 = { (name: String) in
    print("我女朋友的名字叫:\(name)")
}
闭包("小李")
//注意闭包和函数的区别,闭包不能加外部参数名
/*带有返回值的闭包
 {(参数名: 参数类型) -> (返回值类型) in
      闭包主体
 }
*/
let 闭包1 = { (age: Int) -> (String) in
    guard age > 18 && age < 25 else{
        return "不符合我的择偶标准"
    }
    return "做我女朋友好吗"
}
print(闭包1(20))
print(闭包1(30))
//将闭包作为参数.闭包可以像字符串和整型那样使用,所以可以作为参数使用
//注意:闭包其实是一种特殊的匿名函数
//从闭包是一种匿名函数也可以理解这些用法
let goSchool = { () -> () in
   print("去学习")
}
func goWork(){
    print("去上班吧孩子")
}
//参数类型 () -> () 一个无参无返回类型.只要符合这个类型的都可以进行传值.可知,函数和闭包都符合
func manDoThings(name: () -> ()){
   print("此处打印")
    name() //此处调用传入这个类型的函数或者闭包.可以把闭包作为匿名函数去调用
}

//调用函数时系统会提示有两种调用方法
//尾随闭包的调用方式.其实方法名后面省去了()
manDoThings {
   // 闭包主体部分.在这里传参
   // goSchool()
    goWork()
}
//此处闭包作为普通参数.闭包和函数的用法相同
manDoThings(name: goWork)
manDoThings(name: goSchool)
//有参数闭包
let goStreet = { (name: String) -> () in
    print("\(name)去哪了?")
}

func todayTodo(aname: (String) -> ()){
      aname("小明")
}
//有参有返回闭包
todayTodo { (heeh: String) in
    goStreet(heeh)
}

let bibao1 = { (str: String) -> String in
    return "\(str)的年龄是18"
}

func funcThings1(name: (String) -> String) -> String{
    let cc = name("刘燕")
    return cc
}
//aStr后面的类型可以不写,因为swift会自己推断出是String类型.其实闭包里还省略了return
let  dd = funcThings1 { (aStr) -> String in
     bibao1(aStr)
    //return bibao1(aStr)
}
print(dd)
//返回是闭包
func funcThing2(name: String) -> (Int) -> (String){
    func abc(age: Int) -> String {
        if age < 8 {
            return "\(name)正在上学前班"
        }else{
            return "\(name)正在上小学"
        }
    }
    return abc(age:)
}
//定义一个常量接受返回类型.这里返回类型是一个闭包(函数)
let  bibao22 = funcThing2(name: "小豆")
//去调用
let ee = bibao22(10)
print(ee)
//闭包还可以捕获外部的值
//此处省略
上一篇 下一篇

猜你喜欢

热点阅读