是否可以在Objective-C中调用Swift便捷初始化程序

方蛙

假设我在Swift中有一个便捷的初始化程序:

extension UIImage {
    convenience init?(bundleNamed name: String) {
        let bundle = NSBundle(forClass: Foo.self)
        self.init(named: name, inBundle: bundle, compatibleWithTraitCollection: nil)
    }
}

在Objective-C中我怎么称呼它?以下内容不起作用:

[UIImage bundleNamed:@"Bar"];
[[UIImage alloc] initWithBundleNamed:@"Bar"];

我是否需要仅用于Objective-C的附加类扩展?


解决方案:按照下面Lasse的回答,我要做的步骤是:

在Objective-C类实现文件中,添加

#import <ModuleName-Swift.h>

然后我必须删除派生数据并重建。然后,我可以使用便捷初始化程序,如下所示:

[[UIImage alloc] initWithBundleNamed: @"Bar"];

我不需要声明初始化程序,public因为默认级别internal足以满足我的模块要求。

检出将Swift与Cocoa和Objective-C(Swift 2.2)结合使用-混合和匹配看来归结为

  1. 制作便利的初始化器public,以及
  2. 将XCode生成的头文件[YourProductModuleName]-Swift.h导入代码中

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将Objective-C工厂方法转换为Swift便捷初始化程序?

是否可以使用便捷初始化程序覆盖指定的初始化程序?

如何从Objective-C调用Swift初始化程序(具有参数)?

是否可以允许在Swift初始化期间调用didSet?

在Swift中隐藏一个Objective-C初始化程序(或方法)

是否可以在默认成员初始化程序中调用非静态成员函数?

在c ++ 11中,您是否可以始终(安全)用空的初始化程序替换memset()初始化?

当C#调用c ++函数时,是否可以在被调用的c ++函数中初始化数组并返回C#?

如何在Objective-C中调用具有多个参数的Swift初始化方法

是否可以在 Objective-c 中使用 YouTubePlayer-Swift?

指定的初始化程序可以合法地引用它在C99中初始化的变量吗?

是否可以在Objective-C ++中删除dispatch_once?

是否可以在构造函数的初始化程序列表中初始化std :: unique_ptr的std :: array?

在C ++ 17中,是否可以使用带有初始化程序的if语句来解压缩可选内容?

Swift 2迁移错误:不再可以在SKSpriteNode的指定初始化程序中传递nil

是否可以在Objective c上导入Java模型?

是否可以从Objective-C访问config.xml?

JUnit:是否可以模拟在全局变量的初始化中调用的静态方法?

在Java中是否可以基于构造函数调用初始化最终数据成员?

是否可以确保仅在“静态初始化”步骤中调用函数

在C#中,是否在调用main()方法之前初始化所有静态变量?

是否可以在F#中创建惰性事件初始化程序?

Swift:便捷初始化程序-在self.init调用之前使用的Self

在调用self.init之前使用的iOS Swift便捷初始化程序self

在其初始化程序中引用正在初始化的结构是否安全?

在Swift中,为什么我需要重写此初始化程序才能创建自己的便捷初始化程序?

有什么办法可以排除C ++中的“ const”字段初始化程序

为什么指定的初始化程序可以在C ++中工作?

Java中是否提供C#样式对象初始化程序