我正在使用Swift 3将项目更新为Xcode 9中的Swift 4。
在迁移过程中,当它要求我选择" Swift 4 @objc
推理"时,我选择"最小化推理(推荐)"。
然后我按照Xcode帮助页面中标题为"迁移到Swift 4 @objc
推理&#34;,段落&#34;完成Swift 4最小化推理迁移&#34;的所有步骤。< / p>
完成最后两个步骤后(&#34;打开项目的构建设置.;将Swift 3 @objc
推断设置为默认值。&#34;),突然didSelectRowAtIndexPath
未被调用在我的应用程序中没有错误或警告,它根本就没有被调用。
答案 0 :(得分:2)
TL; DR:
事实证明我需要将@objc
标记为didSelectRowAtIndexPath
。
详情:
请注意,在大多数情况下,didSelectRowAtIndexPath
是在用于符合UITableViewDelegate
协议的类扩展中定义的,但由于继承,我的设置不同:
我有ParentVC
和ChildVC
。 ParentVC
通过类扩展符合UITableViewDelegate
(这种方法在Apple&#34; Swift编程语言(Swift 4)&#34;中提到,&#34;添加协议符合扩展&#34;)。 ParentVC
实现了一些UITableViewDelegate
方法,但没有实现didSelectRowAtIndexPath
。
ChildVC
是实际实施didSelectRowAtIndexPath
的地方。这是在类扩展(ChildVC
)中完成的,但请注意,此类扩展不包含一致性(: UITableViewDelegate
)(ParentVC
已经执行此操作并尝试在ChildVC
会导致&#34;冗余一致性&#34;错误)。
因此,将@objc
添加到ChildVC
中的类扩展名可以解决问题。
不确定这是否是Swift / Xcode /编译器/分析器中的错误(可能至少有一个警告是有序的?),或者我用于协议一致性和继承的方法是否有缺陷,会喜欢听到别人的声音接受这个。