将Swift初始化程序桥接到目标C

克里斯·埃丁顿

我试图将Objective C应用程序缓慢迁移到Swift,并开始创建新类-

public class MapsAPI : NSObject {

    let delegate: MapsAPIResponseDelegate

    public init(managerWithDelegate delegate: MapsAPIResponseDelegate) {
        self.delegate = delegate
    }

}

现在,在我的Objective C.m文件中声明了内容,#import MyTarget-Swift.h.h添加@class MapsAPI了所有内容,但是我不确定Objective C的初始化代码应该是什么样。我试过了 -

MapsAPI *api = [[MapsAPI alloc] initWithManagerWithDelegate: self];

但是那个错误-

'MapsAPI'的可见@interface没有声明选择器'initWithManagerWithDelegate:'

我尝试查看我的定义,MyTarget-Swift.h但所有显示的都是-

SWIFT_CLASS("_TtC4What7MapsAPI")
@interface MapsAPI : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

我在这里做错什么了吗?

斯科特·汤普森

您可以选择添加@objcMembers到类声明中:

public class @objcMembers MapsAPI : NSObject {

    let delegate: MapsAPIResponseDelegate

    public init(managerWithDelegate delegate: MapsAPIResponseDelegate) {
        self.delegate = delegate
    }
}

另外(或另外...我要判断谁),您可以将初始化程序标记为暴露于Objective-C

public class MapsAPI : NSObject {

    let delegate: MapsAPIResponseDelegate

    @objc public init(managerWithDelegate delegate: MapsAPIResponseDelegate) {
        self.delegate = delegate
    }
}

而且,如果需要,您还可以显式定义使用的Objective-C选择器:

public class MapsAPI : NSObject {

    let delegate: MapsAPIResponseDelegate

    @objc(initManagerWithDelegate:)
    public init(managerWithDelegate delegate: MapsAPIResponseDelegate) {
        self.delegate = delegate
    }
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将Swift 4枚举桥接到目标C

Swift 初始化程序

Xcode 6.3&Swift错误:目标C方法“ init”由隐式初始化程序“ init()”定义

Swift初始化程序中的错误

Swift:初始化程序内存问题

从Swift初始化程序调用方法

在目标C项目中初始化Swift类会导致无限循环

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

如何将Swift String桥接到Objective C NSString?

自动将C结构函数桥接到Swift方法

将 OneWayToSource 与目标的 OneTime 初始化绑定

目标对象初始化

C#对象初始化程序将初始化只读属性,但仅针对非原始类型

C ++:array <>初始化程序过多

C“错误:无效的初始化程序”

初始化程序不会覆盖指定的初始化程序Swift WatchKit

在目标C中不可见的快速初始化

目标c:关于自我的问题= [超级初始化]

将Realm Swift与初始化程序一起使用会引发常量错误

使用nil初始化程序将Swift数组简化为[Int:Int?]为空

将非失败的初始化程序委派给失败的初始化程序

Swift无法将NSNumber桥接到Float

初始化期间的Swift可选值可防止默认初始化程序继承

使用内联初始化程序时,Swift类初始化会崩溃

Swift 错误消息 - 从初始化程序返回而不初始化所有存储的属性

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

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

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

使用XCode的REGEX搜索/替换将()更改为{}(C ++ 11初始化程序)