在 Objective-C 的時代,如果要幫 UITableView
或 UICollectionView
註冊一個 cell 來用,需要寫像這樣的東西:
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:"UniqueCellIdentifier"];
// 或是
[self.collectionView registerClass:[UICollectionViewCell class] forCellReuseIdentifier:"UniqueCellIdentifier"];
In Swift
來到 Swift 之後,我直覺的寫了像這樣的東西,結果是無法使用的:
self.tableView.registerClass(UITableViewCell.class, forCellWithReuseIdentifier: "UniqueCellIdentifier")
這時候 Xcode 即時除錯的編輯器對這一行就有些微詞了:
Consecutive statements on a line must separated by ';'
Expected ',' separator
Expected ')' in expression list
Cannot invoke 'registerClass' with no arguments
Expected identifier in class declaration
Expected member name following '.'
Expected expression in list of expressions
一看起來有點像是 Xcode 看到不懂的東西就開始胡言亂語。不過也有點像是碰到 class
這個關鍵字就開始噴出相對應有可能的錯誤出來,不過這串錯誤對當前的使用方式卻是一點關係也沒有。
於是就問了一下 Google 大神,就發現
把 UITableViewCell.class
換成
UITableViewCell.self
這樣子,就可以了。
雖然語意上長得有點奇怪,但是這樣就可以 run 起來了
最後,組合起來
self.tableView.registerClass(UITableViewCell.self, forCellWithReuseIdentifier: "UniqueCellIdentifier")
// 或是
self.collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "UniqueCellIdentifier")
這樣, Xcode 的編輯器就不再抱怨,按下 command
+ R
也 build 的起來了