Swift 3.0 Class Note – Closure & Search Display

Presenter : Wei Wei

Closure

  • Closure 是沒有名字的(func)函式

  • Closure Swift是一個值,有型別,屬Reference Type

  • 把函式寫成Closure的步驟:

    1.把名字刪掉,存進一個變數

    2.把參數和回傳值放進大括號裡面,加上關鍵詞“in"

// Func //
func addClosure (number1:Int, number2: Int) -> Int {
number1 + number2
return result
}

// Closure //
let addClosure: (Int, Int) -> Int = {
(number1:Int, number2: Int) -> Int in
let result = number1 + number2
return result
}
  • Closure 可當某函式的參數

  • Closure 可當某函式的回傳值

  • Closre 不僅可回傳值,還可把附近的值回傳出去

  • Closure 可以跟陣列配合使用

  • Closure 簡寫步驟

    1. 如果已經知道參數跟回傳值的型別的話,可以省略closure裡的參數和型別

    2. 如果closure 有回傳值,而且程式碼是一行的話,可以省略return

    3. 可以用$0 $1 …等代表參數

    4. 如果closure 是最後一個參數的話,可以把closure 寫在小括號外面

    5. 如果closure 是唯一個參數的話,可以省略小括號

/// 篩選有文字"o"
import Foundation
fruitArray.filter({
(fruit: String) -> Bool in
return fruit.contains("o")

})

/// 省略版
fruitArray.filter{ $0.contains("o") }

git@github.com:dan12411/HelloClosureBasic.git

Search Display

%e8%9e%a2%e5%b9%95%e5%bf%ab%e7%85%a7-2016-09-30-%e4%b8%8b%e5%8d%885-24-32       0c289a08-9778-49ed-920a-15d1e1a2e627-22061-00010c60e9e850ee

  • 架構上先有一個TableViewController (i.e. SearchTableViewController)
  • 設定資料來源Array – appleProducts
  • 設定Delegate的Section, Row, Cell
  • 再來是重頭戲:
    • 需要新增一UISearchResultsUpdating的protocol
    • 需要新增一UISearchController用來執行搜尋工作的類別
    • 需要新增一UITableViewController用來顯示搜尋結果
    • 需要新增一Array儲存搜尋結果
    • 實作UISearchResultsUpdating下的函式updateSearchResults產生搜尋結果&重新整理資料,會使用到optional binding 、 Array的filter方法 & lowercased
    • TableDataSource部分
      • 用if…else 區隔 SearchTableViewController & ResultTableController的資料
    • viewDidLoad()部分
      • 產生 searchController,指定用resultController顯示搜尋結果

      • 連結SearchTableViewController

      • 設定搜尋時,取消反灰

      • 設定顯示搜尋結果的 tableView 負責告訴顯示結果的 tableView 要顯示什麼資料

    • viewWillAppear()部分
      • tableView 降下 20

      • 把搜尋欄加到Header

git@github.com:dan12411/HelloSearchResultsController.git

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s