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 选择器的主要内容,如果未能解决你的问题,请参考以下文章

获取 JSON 数据以从数组中填充 TableView

从 Swift 3.0 转换为 Swift 2.3

xcode 8.3.3 是不是运行 swift 3.2

swift swift_optional3.swift

swift swift_optional3.swift

swift takasek / CodePiece.swiftのSwift 3.1版