gpt4 book ai didi

ios - 带有 Swift 5.0 编译器的 Xcode 10.2 - 协议(protocol)继承问题

转载 作者:IT王子 更新时间:2023-10-29 05:10:18 29 4
gpt4 key购买 nike

当前的 Xcode 版本 (10.2) 存在一个大问题。

有一个具有以下签名的 BasicViewController 类:

class BasicViewController: UIViewController, UITableViewDataSource, UITableViewDelegate

然后我们有另一个类似 ExampleViewController: BasicViewController 的类,它有一些额外的逻辑。

现在到了棘手的部分......

我们在不同的模拟器和设备上构建和运行该应用程序,一切正常。然后我们存档应用程序,突然 didSelectRow 不再被触发。项目的深度清理和清理使我们能够重现问题而无需再次存档。

我想不出任何情况下会发生这种情况。而且它变得更糟,因为我发现更多类似的问题是 UITableViewDelegate 方法仅在运行存档应用程序时未在子类中调用。归档和提交应用程序期间的某些优化是否存在问题?

我确认我们正确设置了表格的 dataSourcedelegate,表格上没有手势识别器。同样的逻辑在第二次/第三次运行应用程序后运行良好,但在深度清理项目后第一次失败。

我们进行了测试并在子类中设置了 UITableViewDataSourceUITableViewDelegate 然后它每次都按预期工作。似乎继承协议(protocol)效果不佳。如果我们将协议(protocol)保留在父类中,并将它们添加到子类中,则表示子类中的协议(protocol)是多余的。

有没有人遇到过类似的事情?欢迎提出任何建议。

最佳答案

您可能遇到了 https://bugs.swift.org/browse/SR-10257在 Swift 5.0 编译器中。如果您至少有三个文件,就会发生这种情况:

  1. BasicViewController.swift
  2. SomeOtherFile.swift
  3. ExampleViewController.swift

如果 SomeOtherFile.swiftAnyObject 类型的值进行任何调用,您将在 wholemodule 模式下编译,并且文件是按上述顺序传递给编译器(SomeOtherFile.swift 在两者中间),那么编译器似乎无法正确推断出 @objc-ness func tableView(_:, didSelectRowAt:) 的实现。您现在可以通过使用 @objc 显式标记它来解决它。

关于ios - 带有 Swift 5.0 编译器的 Xcode 10.2 - 协议(protocol)继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55592341/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com