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())是没有解决方案,因为它直接调用该类的初始化程序(我不想要的).
但是,请记住将工厂方法作为方法/函数(包括括号)调用,否则您将得到其他内容,但不是您所期望的.如果指定类型,则实际上不能在没有的情况下调用它.
不使用括号时的LLDB输出:
(lldb) po assistant
(Pecunia`_TPA__TTOFCSo11MOAssistant8makeThisfMS_FT_GSQS__ at
RemoteResourceManager.swift)
这个问题实际上揭示了如果你使用自动/弱键入你会得到另一个危险的问题.弱类型语言被认为是危险的,这是有原因的,即使它们很方便.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。