禁用@objc 推理后未调用 didSelectRowAtIndexPath(Xode 9,Swift 4)
didSelectRowAtIndexPath not called after disabling @objc Inference (Xode 9, Swift 4)
我正在将项目从 Swift 3 更新到 Swift 4,在 Xcode 9.
在迁移过程中,当它让我选择"Swift 4 @objc
Inference"时,我select"Minimize Inference (recommended)"。
然后我按照标题为 "Migrate to Swift 4 @objc
inference" 的 Xcode 帮助页面中的所有步骤进行操作,第 "Completing a Swift 4 minimize inference migration" 段。
完成最后两个步骤 ("Open the build settings for the project.; Set Swift 3 @objc
inference to Default.") 后,突然 didSelectRowAtIndexPath
没有在我的应用程序中调用。没有错误和警告,只是没有调用。
tl;博士:
结果我需要将定义了 didSelectRowAtIndexPath
的 class 扩展标记为 @objc
。
详情:
请注意,虽然在大多数情况下 didSelectRowAtIndexPath
是在用于符合 UITableViewDelegate
协议的 class 扩展中定义的,但由于继承,我的设置有所不同:
我有一个 ParentVC
和一个 ChildVC
。 ParentVC
通过 class 扩展符合 UITableViewDelegate
(此方法在 Apple 的 "The Swift Programming Language (Swift 4)" 中提到,在 "Adding Protocol Conformance with an Extension" 下)。 ParentVC
实现了一些 UITableViewDelegate
方法,但没有实现 didSelectRowAtIndexPath
.
ChildVC
是didSelectRowAtIndexPath
真正实现的地方。这是在 class 扩展(ChildVC
)中完成的,但请注意,此 class 扩展不包含一致性(: UITableViewDelegate
)(ParentVC
已经包含这并试图在 ChildVC
中也这样做会导致 "Redundant conformance" 错误)。
因此将 @objc
添加到 ChildVC
中的 class 扩展名解决了问题。
不确定这是否是 Swift/Xcode/compiler/analyzer 中的一个错误(也许至少是一个警告?),或者我用于协议一致性 + 继承的方法是否有缺陷,很想听听其他人对此的看法。
我正在将项目从 Swift 3 更新到 Swift 4,在 Xcode 9.
在迁移过程中,当它让我选择"Swift 4 @objc
Inference"时,我select"Minimize Inference (recommended)"。
然后我按照标题为 "Migrate to Swift 4 @objc
inference" 的 Xcode 帮助页面中的所有步骤进行操作,第 "Completing a Swift 4 minimize inference migration" 段。
完成最后两个步骤 ("Open the build settings for the project.; Set Swift 3 @objc
inference to Default.") 后,突然 didSelectRowAtIndexPath
没有在我的应用程序中调用。没有错误和警告,只是没有调用。
tl;博士:
结果我需要将定义了 didSelectRowAtIndexPath
的 class 扩展标记为 @objc
。
详情:
请注意,虽然在大多数情况下 didSelectRowAtIndexPath
是在用于符合 UITableViewDelegate
协议的 class 扩展中定义的,但由于继承,我的设置有所不同:
我有一个 ParentVC
和一个 ChildVC
。 ParentVC
通过 class 扩展符合 UITableViewDelegate
(此方法在 Apple 的 "The Swift Programming Language (Swift 4)" 中提到,在 "Adding Protocol Conformance with an Extension" 下)。 ParentVC
实现了一些 UITableViewDelegate
方法,但没有实现 didSelectRowAtIndexPath
.
ChildVC
是didSelectRowAtIndexPath
真正实现的地方。这是在 class 扩展(ChildVC
)中完成的,但请注意,此 class 扩展不包含一致性(: UITableViewDelegate
)(ParentVC
已经包含这并试图在 ChildVC
中也这样做会导致 "Redundant conformance" 错误)。
因此将 @objc
添加到 ChildVC
中的 class 扩展名解决了问题。
不确定这是否是 Swift/Xcode/compiler/analyzer 中的一个错误(也许至少是一个警告?),或者我用于协议一致性 + 继承的方法是否有缺陷,很想听听其他人对此的看法。