如何从Swift调用Objective-C类的工厂方法?

如何从Swift调用Objective-C类的工厂方法?,第1张

概述我有一个obj-c类,它使用工厂方法将自身实例化为单例.我将该类添加到我的 Swift桥接头文件中,并希望从swift类中调用此工厂方法.但是,XCode不会让我. obj-c代码是: @interface MOAssistant : NSObject {...+ (MOAssistant *)assistant;@end Swift代码是: let assistant = MOAssis 我有一个obj-c类,它使用工厂方法将自身实例化为单例.我将该类添加到我的 Swift桥接头文件中,并希望从swift类中调用此工厂方法.但是,XCode不会让我.

obj-c代码是:

@interface MOAssistant : NSObject {...+ (MOAssistant *)assistant;@end

Swift代码是:

let assistant = MOAssistant.assistant;

使用此代码我收到错误:

‘assistant()’ is unavailable: use object construction ‘MOAssistant()’

我读了大约mapping factory methods to Swift initializers,但我想知道为什么我只能使用:

let fm = NSfileManager.defaultManager;

即使defaultManager也是工厂方法.这令人困惑.我在这里阅读其他帖子,如下所示:

> How are Objective-C factory methods converted into Swift convenience
initializers?
> Create Swift instance from Objective-C factory
method

但没有一个能解释为什么斯威夫特行为不同.使用推荐的方式(MOAssistant())是没有解决方案,因为它直接调用该类的初始化程序(我不想要的).

经常这样:很好地解释你的问题,你自己也可以找到答案.这是一个命名问题.通过将工厂方法重命名为defaultAssistant之类的东西或像makeThisinstanceForMe这样无关的东西,我可以轻松地从Swift访问它.看起来swift标题创建者删除大写字母以查看它是否与函数名称相同(不区分大小写),如果是这种情况则使其成为Swift初始化程序调用而不是类函数.

但是,请记住将工厂方法作为方法/函数(包括括号)调用,否则您将得到其他内容,但不是您所期望的.如果指定类型,则实际上不能在没有的情况下调用它.

不使用括号时的LLDB输出:

(lldb) po assistant

(Pecunia`_TPA__TTOFCSo11MOAssistant8makeThisfMS_FT_GSQS__ at
RemoteResourceManager.swift)

这个问题实际上揭示了如果你使用自动/弱键入你会得到另一个危险的问题.弱类型语言被认为是危险的,这是有原因的,即使它们很方便.

总结

以上是内存溢出为你收集整理的如何从Swift调用Objective-C类的工厂方法?全部内容,希望文章能够帮你解决如何从Swift调用Objective-C类的工厂方法?所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存