【swift 关键词】让我们牢记swift中的一些关键字用途
发布时间:2020-12-14 06:57:45 所属栏目:百科 来源:网络整理
导读:##好记性不如烂笔头 学习swift 原英文版本 学习swift 翻译中文版 swift数据类型与oc比较 ###进入 退出swift goswift swift//退出goswift ctr+z ###第一个关键字guard 就是守护。guard语句判断其后的表达式布尔值为false时,才会执行之后代码块里的代码,如果
##好记性不如烂笔头 学习swift 原英文版本 学习swift 翻译中文版 swift数据类型与oc比较 ###进入 退出swift goswift > swift //退出 goswift > ctr+z ###第一个关键字guard 就是守护。guard语句判断其后的表达式布尔值为false时,才会执行之后代码块里的代码,如果为true,则跳过整个guard语句 guard后面必须跟else语句 ###inout 在参数前面用inout修饰,在函数内部实现改变外部参数 //调用的时候 swapTwoInts(&one,two: &two) 定义的时候 func swapTwoInts(inout one:Int,inout two:Int) { let temp = one one = two two = temp } ###unowned 避免循环引用,使用unowned修饰( let unowned) weak仅能修饰变量,不能修饰常量( var weak) ###lazy 懒加载,修饰闭包 OC的lazy加载是重写属性的get方法 swift的lazy是只执行一次 ###willSet didSet get set willSet 添加观察属性变化 类似kvo里面的addObserver didSet 检查属性已经变化 ###mutating 用在struct和enum中的函数前面,作用是可以修改struct,enum和protocal中的属性值 struct SRectangle { var width = 200 } extention SRectangle { mutating func varifyWidth(num:Int) {} } ###Subscripts Closures 下标的关键词 subscript 闭包的关键词 in swift中所有闭包默认@noescape,延迟操作,网络延迟需要@escape. @autoclosure可以将一句话封装成闭包 ###typealias 别名 typealias unitype = Int 常见应用 typealias bigProtocal = protocal<BigProtocal,CigProtocal> ###defer 1.延缓执行 2.多个defer的情况,像栈一样,后进先出,从下往上执行 ###throws throw throws 来声明异常,throw 来抛出异常 ###do-catch 异常处理,注意不是try catch! func functionWillThrowError() throws { //实现 } do { throw functionWillThrowError() }catch MyError.NotExist{ }catch MyError. OutOfRange{ } ###repeat repeat是循环重复,是do-while的替身 repeat { }while <#条件#> ###func 参数_ 请注意定义方法有什么不同 var a=3,b=6 func swapValue(inout a:Int,inout b:Int){} 方法调用 swapValue(&a,b:&b) func swapValue(inout a:Int,inout _ b:Int){} 方法调用 swapValue(&a,&b) 注意参数添加_ 有一定的不同 函数还可以作为一种类型 var mathFunc :(inout Int,inout Int)->() = swapValue ###extention extension Int { subscript(digitIndex: Int) -> Int { var decimalBase = 1 for _ in 0..<digitIndex { decimalBase *= 10 } return (self / decimalBase) % 10 } } 746381295[0]//5 ###value && reference type 值类型 和 引用类型 值类型(Value Types):每个实例都保留了一分独有的数据拷贝。如结构体 (struct)、枚举(enum) 和元组(tuple) 引用类型(Reference Type):每个实例共享同一份数据来源,如类(class) // 下面是一个值类型的例子 struct MyStruct { var data = -1 } var s1 = MyStruct() var s2 = s1 // s2是s1的拷贝 s1.data = 42 // 值类型,改变s1的值,s2不受影响 println("(s1.data),(s2.data)") // 输出结果 "42,-1" //值类型: 复制的时候,相当于创造了一个完全独立的实例,这个实例保有属于自己的独有数据, 数据不会受到其他实例的数据变化影响 // 下面是一个引用类型的例子 class MyClass { var data: Int = -1 } var x = MyClass() var y = x // y是x的拷贝 x.data = 42 // 引用类型,更改x的值,等于同时修改了y println("(x.data),(y.data)") // 输出结果 "42,42" //引用类型: 复制的时候,实际上是创造了一个共享的实例分身,两者是共用一套数据(数据存储的地址指向同一块内存)。 因此修改其中任何一个实例的数据,也会影响到另外一个 ###is as is 是类型检查 var movieCount = 0 var songCount = 0 for item in library { if item is Movie { movieCount += 1 } else if item is Song { songCount += 1 } } as 是类型转化 as!,as? for item in library { if let movie = item as? Movie { print("Movie: (movie.name),dir. (movie.director)") } else if let song = item as? Song { print("Song: (song.name),by (song.artist)") } } ###map flatMap filter reduce Swift提供了map、filter、reduce这三个高阶函数作为对容器的支持 ###struct 和 class 区别
###IBDesignable 和 IBInspectable 在Swift里,@IBDesignable关键字写在class前即可。 在OC里,是IB_DESIGNABLE这个关键字,写在@implementation前即可 IBInspectable 在swift里,@IBInspectable关键字写在需要显示的变量前即可 在OC里,是IBInspectable这个关键字,写在需要显示的变量前即可 更多信息,点击> http://www.52php.cn/article/p-flhwlmmn-bod.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |