最近开始学swift,记录一些和oc差异比较大的地方
-
if判断的条件语句必须是表达式
var a = "a" if a { print(a) }
以上代码要报错,要写成
var a: String? = "a" if let b = a { print(a) }
因为赋值并非一定成功,就存在bool的结果
-
函数调用的时候在参数名前加 “_” ,在调用时可以不用显示指定参数名
func person(_ name : String, age:Int) { print("name : \(name) age: \(age)") } person("lily", age:12)
-
让函数返回多个参数,使用元组
func person(_ name : String, age:Int) -> (a:String,b:Int) { print("name : \(name) age: \(age)") return ("name is \(name)",age*2) } let p = person("lily", age: 14) print(p.a) print(p.b)
函数带有可变参数,函数还可以嵌套,跟js太像了
这点就让swift比oc方便太多了,在方法传参的时候可以像js一样省去后面的参数传递,而去使用设置的默认值。就比如初始化方法,oc就要自己写多个方法,然后他们最终都去调一个参数最多的那个初始化方法,参数可选就方便多了。-
类定义和对象初始化
class Person { var name: String var age: Int init(name: String) { self.name = name self.age = 0 } func info() { print("person") } } let p = Person(name:"lily") p.info()
函数、方法、类、枚举和结构体支持泛型
-
闭包表达式
{ (parameters) -> returnType in statements }