天天看點

Swift入門(一)——基本文法基本文法類型附錄

最近開始學習swift,把學習的過程和總結整理成一個系列,友善日後回顧總結。

基本文法

基礎文法

swift中每一行結束後不需要加分号,多個語句在同一行内需要用分好隔開

//表示注釋,或者用

常量

常量是指定義之後無法修改值的量,比如設定一個最大嘗試登陸的次數,它的值一旦被确定,就不應該在程式中被修改。swift中的常量用let表示,定義方法如下:

let maxAttemptTime =  //正确
maxAttemptTime =  //錯誤,常量一旦定義不可以改變
let maxAttemptTime //錯誤 
           

另外要注意的是,常量在定義的時候必須要賦初值,當然也可以不這麼做,後面會詳細介紹。

變量

和常量類不同的是,變量用var表示,可以随意改變值

var currentAttemptTime =  //正确
currentAttemptTime = currentAttemptTime +  //正确
           

列印常量和變量

OC中的NSLog方法依然可用,也可以用swift的println()方法。

NSLog("hello world")
println("hello world") 
//以上兩句等價,輸出結果都是"hello world"

//也可以列印變量或者常量
var name = "kt"
NSLog("name = \(name)")
println("name = \(name)")
//以上兩句等價,輸出結果都是"name = kt"
           

swift也支援print方法,與println不同的是,println在結尾會自動加上換行符,這與java的文法是一緻的。

類型

類型推導

習慣了oc、c++或者java的程式猿會覺得沒有變量的類型很奇怪,其實swift和php與js類似,都是支援類型推導功能的。

所謂的類型推導,就是說swift會根據變量的實際值,自動推導出變量所屬的類型。

swift中的基礎類型有Int、Double、String、UInt8、Character、Bool等。就不一一解釋了。Swift中所有的類型都是首字母大寫的。

var name = "kt" //自動推導為String類型
var age =  //自動推導為Int類型
var pi =  //自動推導為Double類型
           

寬類型優先

既然swift支援類型推導,那麼π的近似值3.1415926,會被推導為什麼類型呢?是Float還是Double? 答案是Double,因為swift具有寬類型優先的特性,也就是為自動推導為取值範圍更寬泛的類型。

類型标注

最開始提到必須要給常量或者變量賦初值,如果不想賦初值,或者不習慣自動類型推導,我們還可以顯示的給常量或者變量标注類型,這被稱為“類型标注”

var name: String //在變量名後加上冒号和類型名來進行類型标注
//經過類型标注後,可以不賦初值

var name: String = "kt" //人為标注為String類型
var age: Int =  //人為标注為Int類型

//這種情況下的類型标注有些多此一舉
           

類型安全

swift支援類型推導,這個功能很友善,與此同時,swift也是嚴謹的,因為它是類型安全的。

所謂的類型安全是指,不支援常量、變量之間的隐式類型類型轉換。

var a = 
var b = 
var c = a + b //報錯
           

也就是說,不同類型的變量(常量)不可以出現在”+、-、*、/等運算符兩側”。

所謂的常量、變量之間,其實是指字面量之間的隐式類型轉換是可以的。比如如下代碼:

類型轉換

如果我希望把整數型和浮點型變量相加怎麼辦呢,可以使用強制類型轉換,又稱顯式類型轉換。

var a = 
var b = 
var c = a + b //報錯
var c = Double(a) + b //正确,得到值為2.5的Double型變量c
var c = a + Int(b) //也正确,得到值為2的Int型變量c
           

需要說明三點:

  1. 精度由高向低或者由低向高都可以,不過高精度轉向低精度會丢失小數點後的資料。
  2. 上述代碼不可以改為“var c = Float(a) + b”,理由是類型安全 + 寬類型優先。
  3. 注意和C語言的文法差別,C語言中的寫法為(int)a,swift中的括号應加在變量上。

類型别名

通過typelias關鍵字可以重新命名類型,類似于C語言中的typedef,不過更簡單。

typealias Name = String //現在Name類型和String類型是完全一樣的了。
var myName: Name = "kt"
           

附錄

檢視完整專欄——《Swift輕松入門》

【Swift入門(一)——基本文法】

【Swift入門(二)——字元與字元串】

【Swift入門(三)——元組(Tuple)】

【Swift入門(四)——可選類型(Optionals)與斷言(Assert)】

【Swift入門(五)——數組(Array)】

【Swift入門(六)——字典(Dictionary)】

【Swift入門(七)——結構體(Struct)】

【Swift入門(八)——功能強大的求餘運算符】

【Swift入門(九)——String與Int、Double、Float等數字互相轉換】

【Swift入門(十)——循環引用、弱引用和無主引用】

【Swift入門(十一)——類型轉換與is、as操作】

【Swift入門(十二)——利用Extension添加逆序輸出字元串方法】