Swift 3 UITableViewDataSource 选择器
Posted
技术标签:
【中文标题】Swift 3 UITableViewDataSource 选择器【英文标题】:Swift 3 UITableViewDataSource selectors 【发布时间】:2016-09-20 09:46:48 【问题描述】:更新到 Swift 3 后,以下代码出现错误:
extension MyViewController: UITableViewDataSource
//...
func tableView(_ tableView: UITableView,
heightForRowAt indexPath: IndexPath) -> CGFloat
return someValue
Objective-C 方法 'tableView:heightForRowAt:' 方法提供 'tableView(_:heightForRowAt:)' 不符合要求 选择器('tableView:heightForRowAtIndexPath:')
可以用
修复@objc(tableView:heightForRowAtIndexPath:)
func tableView(_ tableView: UITableView,
heightForRowAt indexPath: IndexPath) -> CGFloat
return someValue
谁能解释新版本 Swift 中签名更改的动机? migration guide 中没有关于它的信息。
【问题讨论】:
看到这个***.com/questions/39416385/… 【参考方案1】:随着 Swift 3.0 的发布,为了便于阅读,库中许多方法的签名已更改(请参阅 API Design Guidelines)。
例如,将您引用的方法的当前签名与其在 Xcode 的代码完成建议列表中的表示进行比较:
// implementation:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat ...
// code completion:
tableView(tableView: UITableView, heightForRowAt: IndexPath)
对比之前用于显示冗余信息的实现:
// implementation:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat ...
// code completion:
tableView(tableView: UITableView, heightForRowAtIndexPath: NSIndexPath)
--------- -----------
此外,函数或方法的实现现在需要为第一个参数设置下划线 (_
),以便在调用函数/方法时允许省略参数标签(请参阅:https://***.com/a/38192263/6793476)。
显然库中的某些选择器尚未更新,因此您需要提供正确的(“旧”)选择器名称(请参阅:https://***.com/a/39416386/6793476,有关选择器的更多信息:https://***.com/a/24007718/6793476)。
希望对你有帮助。
【讨论】:
以上是关于Swift 3 UITableViewDataSource 选择器的主要内容,如果未能解决你的问题,请参考以下文章