当前位置 : 主页 > 手机开发 > ios >

ios – 带Swift 5.0编译器的Xcode 10.2 – 协议继承问题

来源:互联网 收集:自由互联 发布时间:2021-06-11
我们对当前的 Xcode版本(10.2)存在很大问题. 有一个带有以下签名的BasicViewController类: class BasicViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 然后我们有另一个类,如ExampleVi
我们对当前的 Xcode版本(10.2)存在很大问题.

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

class BasicViewController: UIViewController, UITableViewDataSource, UITableViewDelegate

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

现在是棘手的部分……

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

在发生这种情况时,我无法想到任何情况.而且它变得更糟,因为我发现更多类似的问题,UITableViewDelegate方法仅在运行存档应用程序时才在子类中调用.在归档和提交应用程序期间,这可能是一些优化问题吗?

我验证我们正确设置了表的dataSource和委托,表上没有手势识别器.在第二次/第三次运行应用程序后,相同的逻辑运行良好,但在深度清理项目后第一次失败.

我们做了一个测试并在子类中设置了UITableViewDataSource和UITableViewDelegate,然后每次都按预期工作.似乎继承协议不能很好地工作.如果我们将协议保留在父级中并将它们添加到子类中,那么它表示子类中的协议是冗余的.

有没有人经历过类似的事?欢迎任何建议.

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

> BasicViewController.swift
> SomeOtherFile.swift
> ExampleViewController.swift

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

网友评论