首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >禁用@objc推断后未调用didSelectRowAtIndexPath (Xode 9,Swift 4)

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

Stack Overflow用户
提问于 2017-09-20 19:23:41
回答 1查看 147关注 0票数 0

在Xcode 9中,我正在更新一个从Swift 3到Swift 4的项目。

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

然后,我遵循Xcode帮助页面中的所有步骤,标题为“迁移到Swift 4 @objc推理”,“完成Swift 4最小化推理迁移”一段。

在完成最后两个步骤(“打开项目的构建设置。;将Swift 3 @objc推断设置为默认值”)之后,我的应用程序中突然没有调用didSelectRowAtIndexPath。没有错误或警告,只是没有调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-20 19:23:41

tl;dr:

结果,我需要将定义didSelectRowAtIndexPath的类扩展标记为didSelectRowAtIndexPath

详细信息:

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

我有一个ParentVC和一个ChildVCParentVC通过类扩展与UITableViewDelegate保持一致(这种方法在苹果的“Swift 4编程语言(Swift 4)”“添加协议与扩展的一致性”中提到)。ParentVC实现了一些UITableViewDelegate方法,但没有实现didSelectRowAtIndexPath

ChildVC实际上是实现didSelectRowAtIndexPath的地方。这是在类扩展( ChildVC)中完成的,但是请注意,这个类扩展不包含一致性(: UITableViewDelegate) (ParentVC已经这样做了,并且尝试在ChildVC中也这样做会导致“冗余一致性”错误)。

因此,将@objc添加到ChildVC中的类扩展中解决了这个问题。

不确定这是否是Swift/Xcode/编译器/分析器中的一个bug (可能至少有一个警告?),或者我用于协议一致性+继承的方法是否有缺陷,是否愿意听听其他人的看法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46330255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档