Swift學習筆記2-邏輯分支、循環

邏輯分支

簡單體驗

var i = 10

if i > 0 {
    print("OK")
}
  • 階段性小結
    • Swift 中沒有 C 語言中的非零即真概念
    • 在邏輯判斷時必須顯示地指明具體的判斷條件
    • if 語句條件的 () 可以省略
    • 但是 {} 不能省略

三目

var a = 10
var b = 50

var result = a > b ? a : b
print(result)
  • 階段性小結
    • Swift 中的 三目 運算保持了和 OC 一致的風格

可選項

演練 1

let url = NSURL(string: "http://www.520it.com/")

if url != nil {
    NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, _, _) -> Void in
        print(NSString(data: data!, encoding: NSUTF8StringEncoding))
    }).resume()
}
  • 階段性小結

    • Swift 中,不是所有的對象實例化方法都會返回值,在實際開發中需要注意實例化函數的返回類型,例如:

convenience init?(string URLString: String)


    * 如果有 `?` 表示改方法有可能無法實例化到正確的對象
    * 這種函數返回的對象,被稱為 `可選項`,即有可能有值,也有可能沒有值
    * 實際開發時,需要針對這種對象加以判斷,并且在分支內部使用 `!`,指明改對象確實是存在的
    * 相比在 `OC` 的開發,尤其在日常練習時,會給定一個能夠運行的值,而在實際運行時,一旦條件不滿足,會直接閃退,這樣用戶體驗會非常不好

> `Swift` 的設計者考慮到因為對類型的強制要求,會讓代碼很難看,因此提供了一個變通的解決方案

### 演練 2

```swift
if let url = NSURL(string: "http://520it.com") {
    NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, _, _) -> Void in
        print(NSString(data: data!, encoding: NSUTF8StringEncoding))
    }).resume()
}
  • 階段性小結

    • 使用 if let 常量 = 可選構造函數 的方式能夠確保分支內部常量一定是有值的
    • 并且在分支內部不再需要使用 !
    • 這是 Swift 代碼中的一個非常重要的使用技巧
  • 提示

    • 盡管 Swift 提供了類型校驗的手段,但是要寫出 優雅 的 Swift 代碼,還是需要多加練習的,否則一不小心就會出現分支嵌套層次很深的代碼
    • 有關 ?! 的選擇,可以借助 Xcode 的輔助工具,但是強烈建議每次遇到提示時,要多加思考,反復揣摩

演練3

var name: String?
print(name?.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))

name = "lnj"
print(name?.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))

let l = 10
print(l + (name?.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) ?? 0))
  • 階段性小結
    • ?? 是一個非常有用的操作符,能夠快速對 nil 進行判斷
    • 如果對象是 nil,則使用 ?? 后面的值代替前面的 nil 值參與計算
    • 在使用 ?? 時,整個部分需要使用 () 包裝
    • 這一技巧在 UITableView 的數據源方法中尤為重要

循環

OC風格的 for

// 傳統寫法
for var i = 0; i < 10; i++ {
    print(i)
}

Swift風格的 for

// 遍歷 0 ~ <10
for i in 0..<10 {
    print(i)
}

print("---")

// 遍歷 0 ~ 10
for i in 0...10 {
    print(i)
}
  • 階段性小結
    • Swift 中使用 in 關鍵字標示循環的范圍
    • 0..<10 表示從0到9
    • 0...10 表示從0到10
    • 注意之間不能出現空格

特殊寫法

for _ in 0...10 {
    print("hello")
}
  • 階段性小結
    • 如果不關心循環本身的索引,可以使用 _ 忽略
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應用程序 ...
    大L君閱讀 3,271評論 3 25
  • 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應用程序 2014 年,在 ...
    captain_Lu閱讀 385評論 0 1
  • Swift開發入門 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應用程序...
    Tuberose閱讀 15,024評論 13 93
  • 一、 常量&變量 簡單體驗 階段性小結var 定義變量,設置之后可以修改let 定義常量,設置之后不可以修改語句末...
    _淺墨_閱讀 1,038評論 0 0
  • 一. 常量&變量 簡單體驗 階段性小結var 定義變量,設置之后可以修改let 定義常量,設置之后不可以修改語句末...
    smile麗語閱讀 407評論 5 2