初学swift

    xiaoxiao2021-11-30  60

    闭包,类,结构

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground" func outer() -> ()->Void{ let x = func inner() { print(x) } return inner } let result = outer() result() //闭包:一个代码块(一般指的就是函数)以及被它捕获的一些 //成员(变量,对象等等) //闭包的种类有三种 //1.就是一个普通的全局函数,这是一个有名字的闭包。 //2.内部函数,比如上面的inner,此函数可以捕获它声明的 //时候所用到的东西 //3.闭包表达式,类似于c#语言的lambda表达式 func outer2 (f: ()->Void) { f() } outer2(f: {() in print("xxx") }) func outer3 (f: (Int,Int) -> Int) { let re = f(1,2) print(re) } outer3(f: {(a: Int, b: Int) in print("test...") return a + b }) //闭包的语法:闭包等价于创建了一个匿名函数 //格式:{(参数名: 类型,参数名: 类型) in 代码体 } let arr = [1,19,6,8,33] //最完整的闭包写法 let filtered = arr.sorted(by: {(a: Int,b: Int) in return a < b }) //类型可以依据sorted方法的声明,推断出来,所以可以省略 let filtered = arr.sorted(by: {(a ,b ) in return a < b }) //因为只有一行代码,自动把此行代码的结果返回出去,所以可以去掉return let filtered = arr.sorted(by: {(a ,b ) in //print("sfda") a < b }) //因为swift自动提供隐含的变量名,以$0开始,所以 //参数可以去掉,因为参数去掉in就没意义,所以in也可以去掉 let filtered = arr.sorted(by: { $0 < $1}) //因为sorted方法只有一个参数,而且是函数类型的参数 //所以可以把闭包写在小括号的外面 let filtered = arr.sorted(by:){ $0 < $1} //因为只有一个参数 let filtered = arr.sorted{ $0 < $1} filtered //swift中的一些符号其实是函数,比如下面的> let filtered2 = arr.sorted(by: >) print(filtered2) /*** escaping(跳出,逃出)和自动闭包(autoclosure)*/ //自动闭包,就是把表达式自动转换为闭包 //有前提:函数的声明不能有参数,但必须有返回值,返回值的类型,没有要求 func outer3(f: @autoclosure ()-> Int ) { let s = f() print(s) } outer3(f: 555) //escaping : 函数传递进去时,没有使用,需要加escaping var farr = [()-> Void]() func outer4(f: @escaping () -> Void ) { farr.append(f) } outer4(f: {print("escaping....")}) farr.first?() //可以这样理解:闭包就是一个函数的替代,简化一些方法的使用 /********类与结构********************/ class SomeClass { let a = 5 //存储属性 var b = 6 } struct SomeStruct { let a = 5 var b = 6 } let lei = SomeClass() //不行:lei = SomeClass() //lei.a = 333 不能改 lei.b = 444 let jiegou = SomeStruct() //jiegou.a = 5555 //jiegou.b = 6666 //a,b 都不能改变值 //a,b不能修改原因就是结构是一个值类型 var jiegou2 = SomeStruct() //jiegou2.a = 222 jiegou2.b = 333 jiegou2.b /* 类与结构: 1.类是引用类型,结构是值类型 2.类可以继承,结构不能 什么时候用结构? 1.你的类型,如果只是一些数据的封装,那么可以考虑用结构 用结构的案例: 矩形:长,宽 地址:家庭地址,办公地址 */
    转载请注明原文地址: https://ju.6miu.com/read-679070.html

    最新回复(0)