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))
    }

今天时间不多,先简单记录到这,下次我们继续!