swift 作为 IOS 开发的下一个主流语言(实际上目前的排行早已超过Objective-C),为 IOS 注入了新生命。但也不得不感慨其变化莫测,要跟上它的步伐,就得保持积极学习的态度,该系列会将自己总结的 swift 相关的比较重要而又比较独特的知识点和注意点与大家分享!
在 Xcode 8 的到来后,第三方插件的使用遭遇了阻碍,例如大牛王巍写的 VVDocument,但是苹果官网提供了可供使用的文档注释,可在函数头直接快捷键:cmd+option+/,便可立即生成函数文档注释,方便快捷。
除此之外,swift3.1 还提供了非常便捷的颜色选择快捷键:color+回车,弹出一个颜色选择框,可自由选择颜色。
在需要加入代码标注(方便下次修改)的区域时,可使用://TODO:或者 //FIXME:
swift是强类型语言,不允许不同类型的数据的直接计算;
swift中不存在基本数据类型,都是结构体;
swift开发中,极少使用直接指定类型,通常都是自动推导;
在开发中,通常先使用let,在需要变化时,再改成var;
注意点:?一般用于定义,!解包准备计算。var的可选值默认为nil,let的可选值没有默认值。
强行解包:从可选值中获取对应的非空值,如果真的是nil,程序就会崩溃!程序员必须为每一个!负责,当然程序中应该少用!。由此,也就衍生出了几种对可选值的判断方式:
1. if 判断
这种方法会带来很多大括号,会使程序可读性和执行效率变低,一般不采用该方法。
func demo(x:Int?,y:Int?) {
if x != nil && y != nil {
print(x! + y!)
}else{
print("x或y为nil")
}
}
补充一点:??是一个简单的三木运算符,如果有值,则使用值,如果没有值,使用??后面的值替代,??操作符号的优先级较低,在使用的时候,最好加上括号。
func demo1(x:Int?,y:Int?) {
print((x ?? 0) + (y ?? 0))
}
2. if let 连用
判断对象的值是否为nil, {} 内一定有值,可以直接使用,不需要解包。
func demo2(){
let oldName:String? = "飞哥"
let oldAge:Int? = 23
if let name = oldName,let age = oldAge {
print(name + String(age))
}else{
print("name或age为nil")
}
}
3. guard let
func demo3() {
let oldName:String? = "飞哥"
let oldAge:Int? = 23
// guard let 守护一定有值,如果没有直接返回
guard let name = oldName, let age = oldAge else {
print("name或age为nil")
return
}
// 代码执行至此,anme和age一定有值!
// 通常判断是否有值之后,会做具体的逻辑实现,通常代码多!
// 如果用 if let 凭空多了一层分支,guard 是降低分支层次的办法
// guard 的语法是swift2.0推出
print(name + String(age))
}
今天时间不多,先简单记录到这,下次我们继续!