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

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

概述我们对当前的 Xcode版本(10.2)存在很大问题. 有一个带有以下签名的BasicViewController类: class BasicViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 然后我们有另一个类,如ExampleViewController:BasicViewController 我们对当前的 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显式标记它来解决它.

总结

以上是内存溢出为你收集整理的ios – 带Swift 5.0编译器的Xcode 10.2 – 协议继承问题全部内容,希望文章能够帮你解决ios – 带Swift 5.0编译器的Xcode 10.2 – 协议继承问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/998960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存