美文网首页
Swift3.0+ 学习 (一)

Swift3.0+ 学习 (一)

作者: 咸鱼永动机 | 来源:发表于2017-04-17 01:29 被阅读6次

    变量与常量

    任何Swift中的变量要么是不变的,要么是可变的。变量和常量仅仅是用来秒回持有的值的可变性,或是不可变性。(思考①)

    常量 - 不可变的量
    let name = "Hello Swift"
    

    这里如果你想修改name,是无法做到的,如果你强行修改这个值,Swift在编译时会抛出一个错误。

    let name = "Hello Swift"
    name = "Hi Swift"
    
    Snip20170417_17.png

    要解决这个错误,我们就需要告诉编译器,这是一个变量,使用var关键字来取代常量关键字let

    var name = "Hello Swift"
    name = "Hi Swift"
    

    这样就不会报错了!

    很多人可能会觉得,既然let会导致异常的发生,而var不会,为何不都直接用var呢?这样不就不用担心异常了么!关于这点,我的理解是这样的:很多程序在程序设计之初,设计者为自己的Class定义若干个Prop的时候,设计者就应该决定这个Class中的某些值是否是应当被外部所修改的。这样会从根本上增加代码的安全性。一般来说,不可变性优于可变性,它可以帮助开发者少犯错误,并且更容易编写代码。

    基础类型

    在Swift中,一个类型被声明的写法格式是:是否可变 变量名: 数据类型

    let count: Int = 3
    let name: String = "CherryKing"
    

    Swift也支持类型判断,可以不写具体的类型信息。编译器会根据其初始值来推断它是什么类型。

    let count = 3
    let name = "CherryKing"
    

    这样系统依然会根据赋值的类型,推断出count和name的类型。

    字符串

    打印字符串,Swift中拼接2个String变量用+

    let age = "18"
    let name = "CherryKing"
    print(name + " is " + age)
    

    还有另外一种方式来拼接String

    print("\(name) is \(age)")
    

    有人会纠结了,这里的age是String类型的,如果改为Int,会如何。既然好奇,那就试一下吧。

    Snip20170417_18.png

    结果可惜的是,Swift中并不会为我们自动转换类型。这也是希望我们能够清楚的知道,自己所用的数据是什么类型,以此减少数据类型导致的错误发生。所以,这里就需要我们将Int类型的age强制转换为String类型了。

    let age = 18
    let name = "CherryKing"
    print(name + " is " + String(age))
    print("\(name) is \(String(age))")
    

    再次说明,Swift语言这样设计的目的是为了避免像其他高级语言一样,因为变量可以指向任意数据类型,而发生的各种问题。ㄟ( ▔, ▔ )ㄏ 只能说,灵活有灵活的便利,死板有死板的好处。

    可选类型

    Swift中,总是希望变量在使用前总是已经被赋初始值的,提前用一下if做一个试验:

    Snip20170417_19.png

    我们可以看到,Swift编译器告诉我们,变量pet在其初始化前就被使用了,这是不被允许的。而我们实际开发中,很多值在使用前是否被初始化,并不是我们所能决定的。这时候,我们就需要一个可以为nilnull或者是没有被设置值的变量。

    Swift对这样可选类型的使用方法是在类型声明后面加上?

    var pet: String?
    

    在对pet赋值前,pet的值是nil

    之后我们对pet进行赋值,让他不再为nil

    var pet: String?
    pet = "哈士奇"
    print(pet)
    

    这时候我们可以看到,pet的值似乎和我们想象的不太一样。结果不是"哈士奇",而是Optional("哈士奇")。这里是因为"哈士奇"被包裹在可选类型当中。如果不好理解,可以先试想一下,如果StringString?的输出是一样的。这样的设计才会让人苦恼吧。对于程序来说,String?只是一个可变类型,其中是否有值,只有等到运行的时候,才会被知晓。同时,非可选类型的值是不允许赋值为nil的。


    思考① Swift为何要这么严格的定义可变与不可变类型?



    在学习的过程中,我发现,关于Swift的Markdown,似乎有更好的表现力,于是,我决定使用playground来写文章,同时可以锻炼写注释的速度~


    -> 我的GitHub


    Day01 End

    相关文章

      网友评论

          本文标题:Swift3.0+ 学习 (一)

          本文链接:https://www.haomeiwen.com/subject/izmzattx.html