记录一下自学swift的语法知识。
只记录一些典型的,自己容易忘记的。
/逻辑分支
//if 后面的()可以省略
//判断语句不再有非0/nil即真,判断句必须有明确的真假(true /false)
//三目
//取两者之间大的数
letmmm =20
lethhh =30
varresl =0
resl=mmm>hhh?mmm:hhh
//guard只能在函数中使用
//guard语句必须带有else语句,它的语法如下:
//当条件表达式为true时候跳过else语句中的内容,执行语句组内容
//条件表达式为false时候执行else语句中的内容,跳转语句一般是return、break、continue和throw
//判断一个人能不能去
//1. switch 后面的()可以省略
//2. case 语句结束后,break 可以省略
//在swfit 中,如果一个标识符不需要使用,就可以用下划线代替
for_in0...3{
print("hh")
}
数组
字典
元组
可选类型
函数
类属性的监听
在OC中我们可以重写set方法来监听属性的改变
Swift中可以通过属性观察者来监听和响应属性值的变化
通常是监听存储属性和类属性的改变.(对于计算属性,我们不需要定义属性观察者,因为我们可以在计算属性的setter中直接观察并响应这种值的变化)
我们通过设置以下观察方法来定义观察者
willSet:在属性值被存储之前设置。此时新属性值作为一个常量参数被传入。didSet:在新属性值被存储后立即调用。
willSet与didSet只有在属性第一次被设置时才会调用,在初始化时,不会去调用这些监听方法
闭包
闭包和OC中的block非常相似
OC中的block是匿名的函数
Swift中的闭包是一个特殊的函数
block和闭包都经常用于回调
进行网络请求,请求到数据后利用闭包进行回调
调用
解决闭包中的循环引用
方法1:
方法2:
方法3
懒加载
swift中也有懒加载的方式
(苹果的设计思想:希望所有的对象在使用时才真正加载到内存中)
和OC不同的是swift有专门的关键字来实现懒加载
lazy关键字可以用于定义某一个属性懒加载
自定义log
在实际开发中,我们经常需要自定义log来显示更多的信息。
swift的全局函数定义在appdelegate 中,抽取出来。在debug状态下显示打印。
swfit 中的异常处理
//如果调用系统的某个方法的时候,该方法最后会有一个throw。说明该方法会抛出异常。如果一个方法会抛出异常,需要对异常进行处理。
方式1:try方式。程序员手动处理异常
do{
try 可能抛出异常的代码
}catch{
// error 异常的对象
print(error)
}
方式2: tyr? 系统帮助我们处理异常,如果该方法出现了异常。则该方法返回nil,如果没有异常,返回对应的对象。所以最后返回的类型是可选类型
guard let anyobject = try? JSONSerialization.jsonObject(with: jsonData as Data, options: .mutableContainers) else{
print("没有值")
return
}
方式3: try!直接告诉系统,该方法没有异常。如果有异常出现,程序会崩溃,方法危险,不建议使用。
swift 中的扩展
在swift 中,扩展一个button,在创建的时候就将背景图片和图片传过去。我们有两种写法。创建一个扩展文件。import UIKit 然后 extension UIButton{} 在括号里面实现。
第一种方法,类方法。
swfit 中的类方法。是以class开头的方法,类似oc中 +开头的方法
在调用的时候,用点点出来。
第二中方法,构造函数
构造函数的方法。 UIImage(name: string)构造函数不需要返回值,系统会自动帮你返回。
convenience遍历构造函数。遍历构造函数通常用在对系统的类进行我们的构造函数的扩充时使用。
遍历构造函数的特点:1.遍历构造函数通常写在 Exstension里面
2.遍历构造函数 init 前面需要加convenience
3.在遍历构造函数中需要明确的调用。self.init