switf-基礎03-類型安全與類型引用


    Swift 是一種類型安全(type safe )的語言。

    類型安全的語言會讓你更清楚代碼中可以使用的值的類型。

    如果你的代碼預期一個String,你絕不能誤入一個Int

    

    因爲 Swift是類型安全的,編譯器編譯你的代碼時會執行類型檢查(type checks)

    並標記出任何不匹配的類型錯誤。這使你在開發過程中能夠儘早捕獲並修復錯誤。

    

    當你使用不同類型的值時,類型安全檢查可以幫助你避免錯誤。

    當然,這並不意味着你必須爲每一個常量和變量顯示地指定類型。

    如果你沒有顯示地指定類型,Swift會進行類型推測(type inference),選擇出適當的類型。

    類型推測就是編譯器在編譯代碼時能夠推斷出特定的表達式的類型,主要是根據所提供的值進行推測。

    

    因爲類型推測,所以 Swift C Objective - C 需要更少的類型聲明。

    雖然常量和變量需要明確類型,但大部分的工作不需要你來做。

    

    類型推測是特別有用的,當你聲明一個常量或變量並初始值的時候,即觸發類型推測。

    

    例如,你給一個常量賦值42,但沒有標明類型,

    Swift 可以推測出常量類型是Int,因爲你給它賦的值看起來像一個整數:


    var myAppleCount = 42

    myAppleCount++

    

    同樣的,如果你不指定一個常量爲浮點類型,Swift 推斷出你想要的是Double類型

    var pi = 3.1415926

    pi = pi * 1

    

    如果你把整數和浮點數同時用在表達式中,Swift 會推測爲Double 類型:

    數字 3 沒有顯式的類型,而表達式中出現了一個浮點數,因此,表達式被推測爲 Double類型

    let another = 3 + 0.00222

    pi = another

    

    數字類型字面值

    整數字面值可以寫爲:

    一個十進制數,沒有前綴

    一個二進制數,前綴是 0b

    一個八進制數,前綴是 0o

    一個十六進制數,前綴是 0x

    下面的所有整數面值的十進制值都是17:

    var decimalInteger = 17

    var binaryInteger = 0b10001

    var octalInteger = 0o21

    var hexadecimalInteger = 0x11

    

    print(decimalInteger)

    print(binaryInteger)

    print(octalInteger)

    print(hexadecimalInteger)

    

    浮點數面值可以是十進制(沒有前綴),或者是十六進制(0x前綴)

    但必須有至少一個十進制數字(或十六進制數)在小數點兩側。

    

    浮點數面值還有一個可選的指數(exponent),在十進制浮點數中通過大寫或者小寫的e來表示,

    在十六進制浮點數中通過大寫或者小寫的p來表示。

    如果一個十進制數的指數爲exp,那這個數相當於基數和10^exp10exp次方)的乘積:

    1.25e2 表示 1.25×10^2,等於 125.0

    1.25e-2 表示 1.25×10^-2,等於 0.0125

    如果一個十六進制數的指數爲exp,那這個數相當於基數和2^exp(2exp次方)的乘積:

    0xFp2 表示 15×2^2,等於 60.0

    0xFp-2 表示 15×2^-2,等於 3.75

    下面的這些浮點字面量都等於十進制的12.1875

   

    var decimalDouble = 12.1875

    var exponentDouble = 1.21875e1

    var hexadecimalDouble = 0xC.3p0

    

    print(decimalDouble)

    print(exponentDouble)

    print(hexadecimalDouble)

    

    數值類面值可以包括額外的格式來增強可讀性。整數和浮點數都可以添加額外的零並且包含下劃線,這不會影響字面量

    

    let paddedDouble = 000123.456

    let oneMillion :Double =1_000_000

    let justOverOneMillion = 1_000_000.000_000_1

    

    print(paddedDouble)

    print(oneMillion)

    print(justOverOneMillion)

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章