我试图将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] 删除。
我来说两句