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)")
Swift語言可使用//進行單行註釋和/**/進行多行註釋,除此以外,Swift語言還支持多行註釋的嵌套,示例以下:繼承
//我是單行註釋 /* 我是多行註釋 我是多行註釋 我是多行註釋 */ /* 嵌套註釋 /* 嵌套註釋 */ */
使用Swift在編寫代碼時,以行爲每句代碼的分隔,固然,開發者也能夠將多句代碼寫在一行中,可是須要以分號進行分隔。示例以下:索引
var tmp = 3;print(tmp)
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
在Objective-C中,BOOL值其實是無符號的整型數據,其約定0爲NO,非0都爲YES。在Swift中,Bool被做爲一種獨立的數據類型,提供true和false兩種值。示例以下:
var boolVale:Bool = true
元組是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)
開發文檔提示,元組只適合臨時的簡單組合數據,並不適合處理複雜的數據邏輯,對複雜數據邏輯的處理更提倡使用類。
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) }
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) }
在Objective-C中,使用Assert相關的宏來進行斷言處理,在Swift中也一樣有斷言的相關操做,斷言能夠幫助開發者爲某種狀況添加一個異常中斷,爲開發者提供調試信息。斷言會要求提供一個條件進行判斷,當條件爲真時,程序繼續運行,若是條件爲假,則程序會斷開,示例以下:
let age = -3 assert(age>0, "age must be bigger than zero")
官方文檔爲開發者提供了幾種斷言使用的場景,參考以下:
1.對於索引太小或過大的檢查。
2.當無效的參數傳遞進函數時。
3.對於一個可能爲nil的值,當爲nil時後續代碼沒法工做時。
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592