定義
let 定義常量,一經賦值不允許再修改
var 定義變數,賦值之後仍然可以修改
//: # 常量
//: 定義常量並且直接設定數值
let x = 20
//: 常量數值一經設定,不能修改,以下**會報錯
// x = 30
//: 使用 `: 型別`,僅僅只定義型別,而沒有設定數值
let x1: int
//: 常量有一次設定數值的機會,以下**沒有問題,因為 x1 還沒有被設定數值
x1 = 30
//: 一旦設定了數值之後,則不能再次修改,以下**會報錯,因為 x1 已經被設定了數值
// x1 = 50
//: # 變數
//: 變數設定數值之後,可以繼續修改數值
var y = 200
y = 300
自動推導
swift能夠根據右邊的**,推導出變數的準確型別
通常在開發時,不需要指定變數的型別
如果要指定變數,可以在變數名後使用:,然後跟上變數的型別
重要技巧:option + click 可以檢視變數的型別
沒有隱式轉換!!!
swift 對資料型別要求異常嚴格
任何時候,都不會做隱式轉換
如果要對不同型別的資料進行計算,必須要顯式的轉換
let x2 = 100
let y2 = 10.5
let num1 = double(x2) + y2
let num2 = x2 + int(y2)
let & var 的選擇
應該盡量先選擇常量,只有在必須修改時,才需要修改為 var
在 xcode 7.0 中,如果沒有修改變數,xcode 會提示修改為 let
optional 是 swift 的一大特色,也是 swift 初學者最容易困惑的問題
定義變數時,如果指定是可選的,表示該變數可以有乙個指定型別的值,也可以是 nil
定義變數時,在型別後面新增乙個 ?,表示該變數是可選的
變數可選項的預設值是 nil
常量可選項沒有預設值,主要用於在建構函式中給常量設定初始數值
//: num 可以是乙個整數,也可以是 nil,注意如果為 nil,不能參與計算
let num: int? = 10
如果 optional 值是 nil,不允許參與計算
只有解包(unwrap)後才能參與計算
在變數後新增乙個 !,可以強行解包
注意:必須要確保解包後的值不是 nil,否則會報錯
//: num 可以是乙個整數,也可以是 nil,注意如果為 nil,不能參與計算
let num: int? = 10
//: 如果 num 為 nil,使用 `!` 強行解包會報錯
let r1 = num! + 100
//: 使用以下判斷,當 num 為 nil 時,if 分支中的**不會執行
iflet n = num
常見錯誤
翻譯在[解包]乙個可選值時發現 nil
?? 運算子
?? 運算子可以用於判斷 變數/常量 的數值是否是 nil,如果是則使用後面的值替代
在使用 swift 開發時,?? 能夠簡化**的編寫
let num: int? = nil
let r1 = (num ?? 0) + 10
print
(r1)
if
swift 中沒有 c 語言中的非零即真概念
在邏輯判斷時必須顯示地指明具體的判斷條件 true / false
if 語句條件的 () 可以省略
但是 {} 不能省略
let num = 200
if num < 10 else
if num > 100 else
三目運算
swift 中的 三目 運算保持了和 oc 一致的風格
var a = 10
var b = 20
let c = a > b ? a : b
print(c)
適當地運用三目,能夠讓**寫得更加簡潔
可選項判斷
由於可選項的內容可能為 nil,而一旦為 nil 則不允許參與計算
因此在實際開發中,經常需要判斷可選項的內容是否為 nil
單個可選項判斷
let url = nsurl(string: "")
//: 方法1: 強行解包 - 缺陷,如果 url 為空,執行時會崩潰
let request = nsurlrequest(url: url!)
//: 方法2: 首先判斷 - **中仍然需要使用 `!` 強行解包
if url != nil
//: 方法3: 使用 `if let`,這種方式,表明一旦進入 if 分支,u 就不在是可選項
iflet u = url where u.host == "www.baidu.com"
可選項條件判斷//: 1> 初學 swift 一不小心就會讓 if 的巢狀層次很深,讓**變得很醜陋
iflet u = url
}//: 2> 使用 where 關鍵字,
iflet u = url where u.host == "www.baidu.com"
小結
if let 不能與使用 &&、|| 等條件判斷
如果要增加條件,可以使用 where 子句
注意:where 子句沒有智慧型提示
多個可選項判斷
//: 3> 可以使用 `,` 同時判斷多個可選項是否為空
letoname: string? = "張三"
letono: int? = 100
iflet name = oname }if
let name = oname, let
no = ono
判斷之後對變數需要修改
let oname: string? = "張三"
let onum: int? = 18
ifvar name = oname, num = onum
guardguard 是與 if
let 相反的語法,swift 2.0 推出的
letoname: string? = "張三"
letonum: int? = 18
guard let name = oname else
guard let num = onum else
// **執行至此,name & num 都是有值的
print(name)
print(num)
在程式編寫時,條件檢測之後的**相對是比較複雜的
使用 guard 的好處
能夠判斷每乙個值
在真正的**邏輯部分,省略了一層巢狀
switch
switch 不再侷限於整數
switch 可以針對任意資料型別進行判斷
不再需要 break
每乙個 case後面必須有可以執行的語句
要保證處理所有可能的情況,不然編譯器直接報錯,不處理的條件可以放在 default 分支中
每乙個 case 中定義的變數僅在當前 case 中有效,而 oc 中需要使用 {}
let score = "優"
switch score
switch 中同樣能夠賦值和使用 where 子句
let point = cgpoint(x: 10, y: 10)
switch point
如果只希望進行條件判斷,賦值部分可以省略
switch score
Swift2學習 Swift概覽2 控制流
控制流 使用if和switch構建條件語句,使用for in,for,while和repeat while構建迴圈語句。括號括主條件語句或迴圈變數是可選的。但是擴主主語句是必須的。for score in individualscores else if score 50 else print te...
Swift2學習 Swift概覽6 協議和擴充套件
協議和擴充套件 用protocol宣告乙個協議。protocol exampleprotocol mutating func adjust 類,列舉和結構體都可以接受協議。class class exampleprotocol var a class a.adjust let adescriptio...
Swift2學習 Swift概覽4 物件和類
物件和類 使用class並在其後面跟著類名來建立乙個類。類中常量或者變數已同樣的方法宣告,除非他是類的上下文 類之外 同樣的,方法和類以同樣的方式宣告。class shape 練習 通過let新增乙個常量屬性,並新增另外乙個方法來使用這個引數。通過在類名之後放置一對圓括號來建立乙個類物件。通過小數點...