逻辑分支
if后面的()可以省略 ,没有非即真,没有nil Bool只有ture和false。
guard Swif2.0 可以替换if guard 条件判断 else {条件不成立 } 条件成立
switch 后面的()可以省略掉 , case结束后可以不加break 系统默认加一个break,一个case可以同时判断多个条件。case后加一个关键字fallthrough可以产生case穿透。可以判断浮点型和字符串、区间类型。0...9 开区间0..<10
循环语句
for swift3.0之后只支持区间遍历, 若i没有被使用可以用_来代替以达到节约空间的目的
while和do while
while后面的()可以省略,不支持非空即真
字符串
String是一个结构体,性能更高,NSString是一个OC对象性能较低。 “” Swift3.0中 NSSting和Sting之间可以无缝转换 字符串与字符串之间的拼接用+ 与其它类型拼接
用\()
数组
let声明不可变数字 var可变数组 let array :Array<String> = [""""""""]; let array = [String]()
array.append("") array.remove(at:) array[1] array.count for i in 0..<count {} for item in array{} for (index, item) in array.enumerated{}
如果两个数组的元素类型相同,则可以通过+号合并数组 var array = arr1 + arr2
字典
let dic : Dictionary<String, Any> = ["":"","":""] var dic = [String,Any]()
dic["key"] = value dic.removeValue(forKey:"key") dic.updateValue(value, forkey:"key") for key in dic.keys {} for value in dic.values{} for (key, value) in dic {}
字典的相加不能直接相加,只能遍历其中一个字典,逐个添加到另一个数组中。
元组
类似与字典和数组,但是更加灵活, let info = (item1,item2) let info = (name1:item1,name2:item2) let(name1,name2,name3)= (item1,item2,item3)
可选类型Optional,对空值进行判断
swift中nil也是一种类型,只有可选类型才能被赋值为nil
let a :Optional(String)= nil let a :String? = nil a = Optional(value) 或 a = value 此时编译器会自动加上Optional关键字
取值 print(a) 或强制解包 print(a!) 强制解包会有危险,如果值为nil,强制解包会crash
可选绑定 if let a = a {} 使可选类型使用起来更加方便,自动解包的功能
swift中的每一个非可选类型的属性必须有一个非空值,如果为空,必须为可选类型
类型转换 as as? as!
as?转换为可选类型 as!转换为具体类型 一般用于转换Any类型
函数的应用
内部参数、外部参数:默认即使内部参数也是外部参数,参数名前再加一个标识符即可修改外部参数名称,加一个 _ 符号即可隐藏外部参数名称
可变参数: 参数的个数是可变的,count :Int...
默认参数: coffee:Sting = “雀巢”
指针参数:swift3.0中的函数参数必须为常量,2.0中可以通过加上var改为变量,所以3.0中可以通过inout取地址符直接找到参数的地址。
枚举类型
定义方式 enum name :Sting{ case key1 = Sting1 case key2 = sting2} enum name { case key1 case key2 }
enum name :Sting{ case key1 = Sting1 ,key2 = sting2}
取值:name.key name(rawvalue:"key")
结构体 值类型,在方法中传递是值传递。是一种数据结构。
swift中结构体中既可以有属性,也可以有方法。在函数中修改了成员属性必须在函数名前加上关键字mutating。构造函数都是以init开头,构造函数结束时必须给每一个成员属性都初始化。
类
class classname :superClass { } 也可以不继承 声明对象时,需要同时对属性初始化赋值或者定义为可选类型,也可以在构造函数中初始化类的属性。
定义类的属性
存储属性:存储实例的常量或变量,年龄、姓名等等 var score :Int = 100
计算属性:通过一定的计算的来的属性,以便以后使用的属性。只读属性,oc中很多没有参数的方法在swift中都可以写成计算属性。平均成绩 var averagescore : Int { return a*b/0.5}
类属性:只能通过类名来获取 static var name = name
监听属性
属性监听器:willSet{ } didSet{ }
闭包
()->() @escaping 关键字修饰闭包
闭包循环引用的解决方案:weak var weakself = self 或者 [weak self] self?.key 或者 [unowed self]
如果闭包是最后一个参数,可以写成尾随闭包的形式,要是最后一个参数且是唯一的参数,可以省略()在尾随闭包。
懒加载
lazy var name :[String]= { 创建一个对象 return name}()
lazy var name :[String] = ["","",""]
访问权限
internal 内部的 默认 本模块,包,target,项目中都可以访问
open 开放的 跨项目,跨框架,挎包访问
private 私有的 只有在本类中访问
filePrivate 当前源文件中访问。 swift3.0