我正在尝试将SWIFT库绑定到Xamarin iOS。源代码具有类:
@objc(ClassA)
public class ClassA: NSObject {
// ...
public init(param1: StructA, param2: EnumStringA = .defaultValueA) {
// ...
}
}
但是在*-Swift.h文件中,它看起来是这样的:
SWIFT_CLASS_NAMED("ClassA")
@interface ClassA: NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end
所以,当然,Sharpie工具使接口为空,没有构造函数:
[BaseType(typeof(NSObject))]
[DisableDefaultCtor]
interface ClassA
{
}
我认为这可能是因为StructA和EnumStringA都没有公开,但@objc
属性不适用于struct
和enum : String
如何使构造函数可见?
除了在我(唯一(的init
参数中的协议上有@objc
属性外,我还必须将@objc
属性添加到我的init
方法本身,使其看起来像这样(使用OP示例(:
@objc
public init(param1: MyProtocol) {
<...>
}
这将输出*-Swift.h
文件中所需的代码。