Swift 3.0 Class Note — Closure & Search Display

T.c. Hung
Swift X TeChengHung
4 min readSep 30, 2016

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 可當某函式的回傳值
  • Closure 不僅可回傳值,還可把附近的值回傳出去
  • 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

--

--