dbu*_*ann 1 xcode uitableview ios xcode6gm
今天我更新到新发布的xCode 6 GM.当我尝试构建我的应用程序时,我得到一个编译器错误,说我的一个View控制器处理表"不符合协议UITableViewDataSource".之前一切正常(使用xCode 6 Beta 5)
根据文档,协议需要2种方法:
- tableView:cellForRowAtIndexPath:必需的方法
- tableView:numberOfRowsInSection:必需的方法
它们都实现了:
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return feed!.count
}
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
println("HashtagDetailViewController: tableView - cellForRowAtIndexPath called")
let cell = tableView.dequeueReusableCellWithIdentifier("postCell", forIndexPath: indexPath) as PostTableCell
cell.loadItem(feed!.toArray()[indexPath.row])
return cell
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?是否有一个新的必需方法不在文档中?谢谢你的帮助
小智 7
许多Swift签名在最新测试版中使用了选项.因此,您现有的实现将成为重载的本地方法,而不是协议方法的实现.如果它是协议中的必需方法,您将获得这些消息,因为编译器假定您尚未实现所需的方法.
这是一个小麻烦,但如果您在这些协议中实现可选方法的实现已经改变了它们的签名,那就更加危险了.您将不会收到任何编译器警告,并且您认为实现协议方法的方法永远不会被调用.
您必须手动检查每个现有的实现,以确保您的代码不会发生上述情况.
最简单的方法是将光标放在每个方法头中,就像通常在方法的侧窗口中获得快速帮助一样.如果它被正确地键入为协议方法,您将在快速帮助中看到该方法的描述,最后定义的框架.如果由于签名差异而成为本地方法,则不会在"快速帮助"窗口中看到任何描述,而是会显示相关方法的列表,并且更多地告诉该行说明它是在该本地文件中定义的.
在这样的框架更改之后,我不知道有什么方法可以防止在代码中手动检查每个这样的现有可选实现.
协议略有改变:
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
Run Code Online (Sandbox Code Playgroud)
就是现在:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |