禁用@objc推理后未调用didSelectRowAtIndexPath(Xode 9,Swift 4)

时间:2017-09-20 19:23:41

标签: ios swift xcode swift4 xcode9

我正在使用Swift 3将项目更新为Xcode 9中的Swift 4。

在迁移过程中,当它要求我选择" Swift 4 @objc推理"时,我选择"最小化推理(推荐)"。

然后我按照Xcode帮助页面中标题为&#34;迁移到Swift 4 @objc推理&#34;,段落&#34;完成Swift 4最小化推理迁移&#34;的所有步骤。< / p>

完成最后两个步骤后(&#34;打开项目的构建设置.;将Swift 3 @objc推断设置为默认值。&#34;),突然didSelectRowAtIndexPath未被调用在我的应用程序中没有错误或警告,它根本就没有被调用。

1 个答案:

答案 0 :(得分:2)

TL; DR:
事实证明我需要将@objc标记为didSelectRowAtIndexPath


详情:

请注意,在大多数情况下,didSelectRowAtIndexPath是在用于符合UITableViewDelegate协议的类扩展中定义的,但由于继承,我的设置不同:

我有ParentVCChildVCParentVC通过类扩展符合UITableViewDelegate(这种方法在Apple&#34; Swift编程语言(Swift 4)&#34;中提到,&#34;添加协议符合扩展&#34;)。 ParentVC实现了一些UITableViewDelegate方法,但没有实现didSelectRowAtIndexPath

ChildVC是实际实施didSelectRowAtIndexPath的地方。这是在类扩展(ChildVC)中完成的,但请注意,此类扩展不包含一致性(: UITableViewDelegate)(ParentVC已经执行此操作并尝试在ChildVC会导致&#34;冗余一致性&#34;错误)。

因此,将@objc添加到ChildVC中的类扩展名可以解决问题。

不确定这是否是Swift / Xcode /编译器/分析器中的错误(可能至少有一个警告是有序的?),或者我用于协议一致性和继承的方法是否有缺陷,会喜欢听到别人的声音接受这个。