现在Swift已经弃用它,是否有替代macOS中的initialize()?

现在Swift已经弃用它,是否有替代macOS中的initialize()?,第1张

概述Objective-C声明了一个类函数initialize(),它在每个类使用之前运行一次.它经常被用作交换方法实现(混合)等的入口点.它的使用在Swift 3.1中被弃用了. 这就是我以前做的事情: extension NSView { public override class func initialize() { // This is called on class Objective-C声明了一个类函数initialize(),它在每个类使用之前运行一次.它经常被用作交换方法实现(混合)等的入口点.它的使用在Swift 3.1中被弃用了.

这就是我以前做的事情:

extension NSVIEw {    public overrIDe class func initialize() {        // This is called on class init and before `applicationDIDFinishLaunching`    }}

如果没有初始化,我怎样才能实现同样的目标?

我需要它用于框架,所以要求在AppDelegate中调用一些东西是不行的.我需要在applicationDIDFinishLaunching之前调用它.

我真的很喜欢this解决方案.这正是我正在寻找的,但它适用于iOS.我需要它用于macOS.有人可以推荐一个macOS版本吗?

具体来说,我需要相当于此,但对于macOS:

extension UIApplication {    private static let runOnce: VoID = {        // This is called before `applicationDIDFinishLaunching`    }()    overrIDe open var next: UIResponder? {        UIApplication.runOnce        return super.next    }}

我试过在NSApplication上覆盖各种属性但没有成功.

解决方案需要在纯Swift中.没有Objective-C.

不,swift替代initialize()不存在,主要是因为Swift是静态调度的,所以方法调用不能被截获.并且实际上不再需要,因为该方法通常用于从Objective-C文件初始化静态变量,并且在Swift中静态/全局变量总是很懒并且可以使用表达式的结果进行初始化(在Objective-中不可能的事情) C).

即使有可能实现类似的东西,我也不鼓励你在没有框架用户知识的情况下隐式运行东西.我建议在库中的某处添加configure方法,并要求库的用户调用它.这样他们就可以控制初始化点.只有少数事情比我链接的框架更糟糕,但不再(或尚未)使用,未经我的同意开始执行代码.

让框架用户可以控制他们何时希望框架代码启动,这是更合理的.如果您的代码确实必须在应用程序生命周期的最开始运行,那么请求框架用户在任何其他调用之前调用您的框架入口点.正确配置框架也符合他们的利益.

例如.:

MyFramework.configure(with: ...)// orMyManager.start()
总结

以上是内存溢出为你收集整理的现在Swift已经弃用它,是否有替代macOS中的initialize()?全部内容,希望文章能够帮你解决现在Swift已经弃用它,是否有替代macOS中的initialize()?所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1051886.html

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

发表评论

登录后才能评论

评论列表(0条)

保存