更新到Swift 3后,我在以下代码中收到错误:
extension MyViewController: UITableViewDataSource {
//...
func tableView(_ tableView: UITableView,
heightForRowAt indexPath: IndexPath) -> CGFloat {
return someValue
}
}
Objective-C方法'tableView:heightForRowAt:'由方法提供 'tableView(_:heightForRowAt :)'与要求不匹配 selector('tableView:heightForRowAtIndexPath:')
可以用
修复@objc(tableView:heightForRowAtIndexPath:)
func tableView(_ tableView: UITableView,
heightForRowAt indexPath: IndexPath) -> CGFloat {
return someValue
}
有没有人可以解释新版Swift中签名变更的动机? migration guide中没有关于它的信息。
答案 0 :(得分:2)
随着 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)
--------- -----------
此外,函数或方法的实现现在需要为第一个参数设置下划线(_
),以便在调用函数/方法时允许省略参数标签(请参阅:{{3} })。
显然,图书馆中的某些选择器尚未更新,因此您需要提供正确的(#34;旧的#34;)选择器名称(请参阅:https://stackoverflow.com/a/38192263/6793476以及有关选择器的更多信息:https://stackoverflow.com/a/39416386/6793476)。
我希望有所帮助。