Swift 3 ObjC Optional Protocol Method Not Called in Subclass

后端 未结 2 1774
猫巷女王i
猫巷女王i 2020-12-05 03:35

I have the following class hierarchy:

class ScrollableViewController: UIViewController, UITableViewDelegate { // ... }

That implements one

2条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-05 04:17

    This appears to be fixed in Swift 3.0.1 for normal subclasses, but is not fixed for generic subclasses:

    class A: NSObject, UITableViewDelegate {}
    
    class B: A {
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {}
    }
    
    class C: A {
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {}
    }
    
    print(#selector(B.tableView(_:didSelectRowAt:))) // tableView:didSelectRowAtIndexPath:
    print(#selector(C.tableView(_:didSelectRowAt:))) // tableView:didSelectRowAt:
    

    See: https://bugs.swift.org/browse/SR-2817

    To fix it: https://stackoverflow.com/a/39416386/1109892

    @objc(tableView:heightForRowAtIndexPath:)
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
      // return stuff
    }
    

提交回复
热议问题