Swift解讀專題二——基本類型

Swift解讀專題二——基本類型

1、常量和變量

        Swift語言的常量和變量在使用以前,必須被定義。常量用於處理程序中只在初始化時設置的量值,以後不能進行賦值改變,變量用於處理程序中能夠進行改變的量值。分別用let和var來聲明常量和變量,示例以下:數組

var varValue = 1
let letValue = 10

Swift語法也支持在一行中聲明多個量值,示例以下:函數

var a=1,b=2.9,c="string"

在聲明量值時,編譯器會根據第一次賦值的類型來推斷出變量的類型,一旦量值的類型被推斷,則不可以進行更改,開發者也能夠手動註釋量值的類型,示例以下:spa

var a:Int=1,b:Float=2.9,c:String="string"

在一行中聲明多了變量而且沒有提供初始值時,爲最後一個變量註釋的變量類型也會應用於本行中的全部變量,示例以下:設計

var one,two,three:Int

官方文檔建議,在實際應用中,註釋量值的類型是十分少用的,通常都會爲其賦值初始值後讓編譯器自行推斷。指針

        量值的命名能夠包含Unicode字符和數字,須要注意,是不能以數字做爲量值名稱的開頭的。空格,數學符號,製表符,箭頭等符號也不可使用。示例以下:調試

//中文符做變量名
var 琿少 = "me"
//表情符做爲變量名
var 😄 = "開心"
//含有數字的變量名
var one2three = "123"
//含有下劃線的變量名
var _d_s = "C++"

注意:若是使用Swift中的保留關鍵字做爲量值的名,須要加上左右個加上`符號包圍,除非特殊狀況,不然不要使用這種方式命名量值,示例以下:code

var `let` = "c"

使用print()方法能夠進行量值的打印,在字符串中使用\()格式能夠插入變量,示例以下:對象

var _d_s = "C++"
print("123\(_d_s)")

2、關於註釋與編寫結構

        Swift語言可使用//進行單行註釋和/**/進行多行註釋,除此以外,Swift語言還支持多行註釋的嵌套,示例以下:繼承

//我是單行註釋
/*
 我是多行註釋
 我是多行註釋
 我是多行註釋
 */
/*
 嵌套註釋
    /*
    嵌套註釋
    */
 */

使用Swift在編寫代碼時,以行爲每句代碼的分隔,固然,開發者也能夠將多句代碼寫在一行中,可是須要以分號進行分隔。示例以下:索引

var tmp = 3;print(tmp)

3、整型與浮點型

        Swift中提供8位、16位、32位、64位類型的整型,整型數組不包含小數,包含負整數,0和正整數。在Swift語言中,整型是由結構體定義的,能夠調用max和min方法獲取對應位數的最大值和最小值,示例以下:

var maxInt8 = Int8.max     //127
var mimInt8 = Int8.min    //-128
var maxInt16 = Int16.max  //32767
var minInt16 = Int16.min  //-32768
var maxInt32 = Int32.max  //2147483647
var minInt32 = Int32.min  //-2147483648
var maxInt64 = Int64.max  //9223372036854775807
var minInt64 = Int64.min  //-9223372036854775808

Int類型的值在不一樣位數的系統會有不一樣的結果,在32位系統上,Int與Int32相同,在64位系統上,Int與Int64相同。

        Swift語言也提供了無符號整型,示例以下:

var maxUInt8 = UInt8.max       //255
var maxUInt16 = UInt16.max     //65535
var maxUInt32 = UInt32.max     //4294967295
var maxUInt64 = UInt64.max     //18446744073709551615

UInt類型在32位系統爲UInt32,在64位系統爲UInt64。

        浮點型用於建立小數,Swift提供了兩種類型的浮點型,Float對應32位的浮點值,Double對應64位的浮點值。

        在定義整型或浮點型數據時,能夠經過添加前綴的方式來指定其進制類型,示例以下:

var type_10 = 17;  //十進制的17
var type_2 = 0b10001 //二進制的17
var type_8 = 0o21  //八進制的17
var type_16 = 0x11 //16進制的17

對於科學計數法,在Swift中使用e和p來標識,在十進制中使用e表明10的n次方,在十六進制中,使用p表明2的n次方,示例以下:

var sum = 1.25e3 //1.25*10^3 = 1250
var sun2 = 0x1p3 //1*2^3 = 8

Swift中還有一個很是有意思的特性,不管是整型仍是浮點型,均可以在數前使用0進行填充,而且可使用下劃線進行可讀性分隔,是代碼看起來更加清晰,這些都不會改變原數據值,示例以下:

var num1 = 001.23
var num2 = 1_000
var num3 = 1_000.1_001

開發者也可使用typealias關鍵字來爲某個數據類型添加一個別名,示例以下:

typealias MyType = Int

4、布爾類型

        在Objective-C中,BOOL值其實是無符號的整型數據,其約定0爲NO,非0都爲YES。在Swift中,Bool被做爲一種獨立的數據類型,提供true和false兩種值。示例以下:

var boolVale:Bool = true

5、元組

        元組是Swift語言十分重要的一個特色,它容許開發者將任意個不一樣類型的數據組合成一個數據類型,這也是Swift語言的一個強大之處。例如以下示例代碼能夠建立一個元組:

var tuples:(param1:Int,param2:Float,param3:String,param4:Bool) = (3,3.14,"圓周率",true)

tuples就是一個類型爲(param1:Int,parame:Float,param3:String,param4:Bool)類型的元組。取元組數據的對應值有兩種方式,一種是使用數據參數名稱,一種是直接使用數據的角標,示例以下:

//經過參數名取元組中的數據
var tuplesInt = tuples.param1;
var tuplesFloat = tuples.param2;
var tuplesString = tuples.param3;
var tuplesBool = tuples.param4;
//經過角標取元組中的數據
var tuplesInt2 = tuples.0;
var tuplesFloat2 = tuples.1;
var tuplesString2 = tuples.2;
var tuplesBool2 = tuples.3;

開發者也能夠將元組分解成單獨的常量進行訪問,示例以下:

let (fir,sec,thr,four) = tuples
print(fir,sec,thr,four)

有時候,某個元組中的全部數據開發者並不必定都須要使用,開發者能夠選擇只提取元組中所須要的值,示例以下:

let (fir,_,thr,_) = tuples
print(fir,thr)

開發文檔提示,元組只適合臨時的簡單組合數據,並不適合處理複雜的數據邏輯,對複雜數據邏輯的處理更提倡使用類。

6、Optionals值

        Optional也是一種具體的數據類型,其寄附與其餘數據類型上,其只有兩個值:

1.若是有值,則它爲具體的值。

2.若是沒有值,則它爲nil。

對於習慣了Objective-C語言設計風格的開發者來講,Optional的概念可能有些難於理解,經過一個例子就很好理解,示例代碼以下:

let tmp = 123
let tmp2 = Int("123")

上面建立的兩個常量tmp和tmp2雖然值都是123,然而其並非相同的類型,tmp是嚴格的Int類型值,tmp2是基於Int類型的Optional值,他們在使用時,Optional值須要使用!進行拆包操做,示例以下:

let tmp = 123
let tmp2 = Int("123")
let tmp3 = tmp + tmp2!

有時候,Int()構造方法並不必定能構形成功,這時tmp2是會爲nil值的,示例以下:

let tmp2 = Int("a")

將普通類型聲明爲Optional類型,只需在類型名後添加?符號便可,示例以下:

let optionalValue:Int? = 1

Swift中的nil與Objective-C中的nil意義並不相同,在Objective-C中,nil表明指針指向一個不存在的對象,Swift中的nil並非指針,它是一種抽象類型的值,在Swift不僅對象的Optional類型能夠設置爲nil,任何數據類型的Optional類型均可以設置爲nil。

        Optional值常常會和if條件語句一塊兒使用,用來判斷某個值是否被初始化了,示例以下:

if optionalValue != nil {
    print(optionalValue)
}

Swift還提供了if let語法進行Optional值得綁定,示例以下:

//若是optionalValue值不爲nil,則會將拆包後的值賦值給tip
if let tip=optionalValue {
    print(tip)
}

開發者還能夠在一個綁定語句後進行多個Optional值的綁定,並使用where進行條件判斷,示例以下:

let optionalValue:Int? = 1
let optionalValue2:Int? = 2
if let tip=optionalValue,tip2=optionalValue2 where tip<tip2{
    print(tip,"<",tip2)
}

7、異常處理

        Swift中也有一套十分強大的異常處理系統。在編寫函數時,若是這個函數可能拋出異常,則須要加上throw關鍵字,而且在函數中也是使用throw關鍵字來進行異常的拋出。示例以下:

//異常的捕獲 自定義的異常必須繼承與ErrorType類
enum MyErrorType:ErrorType {
    case CanNotZero
    case Other
}
//可能拋出異常的函數
func ErrorTest() throws {
    let a=0;
    if a==0 {
        throw MyErrorType.CanNotZero
    }
}
//進行異常捕獲
do {
    //使用try進行可能拋異常函數的執行
    try ErrorTest()
    //沒有錯誤執行的代碼塊
    //catch加錯誤類型 爲捕獲相應的異常
}catch MyErrorType.Other {
    //拋異常後執行的代碼塊
    print("MyErrorType.Other")
}catch MyErrorType.CanNotZero {
    print("MyErrorType.CanNotZero")
}catch{
    //若是不寫捕獲的異常類型 則會捕獲全部異常 而且傳入一個error異常參數
    print(error)
}

8、斷言

        在Objective-C中,使用Assert相關的宏來進行斷言處理,在Swift中也一樣有斷言的相關操做,斷言能夠幫助開發者爲某種狀況添加一個異常中斷,爲開發者提供調試信息。斷言會要求提供一個條件進行判斷,當條件爲真時,程序繼續運行,若是條件爲假,則程序會斷開,示例以下:

let age = -3
assert(age>0, "age must be bigger than zero")

官方文檔爲開發者提供了幾種斷言使用的場景,參考以下:

1.對於索引太小或過大的檢查。

2.當無效的參數傳遞進函數時。

3.對於一個可能爲nil的值,當爲nil時後續代碼沒法工做時。

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索