尝试在objective-c类中使用swift对象时,“init”不可用
我有一个swift对象,但当我尝试在objective-c类中使用它时,我得到的“init”不可用,这是为什么 我的Swift等级如下所示:尝试在objective-c类中使用swift对象时,“init”不可用,objective-c,swift,Objective C,Swift,我有一个swift对象,但当我尝试在objective-c类中使用它时,我得到的“init”不可用,这是为什么 我的Swift等级如下所示: import Foundation @objc public class OsonOptions : NSObject { @objc var isWebview: Bool @objc var key: String @objc var token: String @objc var products : Array&l
import Foundation
@objc public class OsonOptions : NSObject {
@objc var isWebview: Bool
@objc var key: String
@objc var token: String
@objc var products : Array<String>
var env: Environment
@objc var clientName: String
public init(isWebview: Bool,key: String,token: String,products:Array<String>,env: Environment,clientName: String) {
self.isWebview = isWebview
self.key = key
self.token = token
self.products = products
self.env = env
self.clientName = clientName
}
}
#import "MyFancyLibrary.h"
#import <OsonWidget/OsonWidget-Swift.h>
@implementation MyFancyLibrary
RCT_EXPORT_MODULE()
RCT_EXPORT_METHOD(greetings:(RCTResponseSenderBlock)callback){
OsonOptions *osonOptions = [[OsonOptions alloc] init];
NSString* someString = @"random";
callback(@[someString]);
}
@end
我使用它的objective-c类如下所示:
import Foundation
@objc public class OsonOptions : NSObject {
@objc var isWebview: Bool
@objc var key: String
@objc var token: String
@objc var products : Array<String>
var env: Environment
@objc var clientName: String
public init(isWebview: Bool,key: String,token: String,products:Array<String>,env: Environment,clientName: String) {
self.isWebview = isWebview
self.key = key
self.token = token
self.products = products
self.env = env
self.clientName = clientName
}
}
#import "MyFancyLibrary.h"
#import <OsonWidget/OsonWidget-Swift.h>
@implementation MyFancyLibrary
RCT_EXPORT_MODULE()
RCT_EXPORT_METHOD(greetings:(RCTResponseSenderBlock)callback){
OsonOptions *osonOptions = [[OsonOptions alloc] init];
NSString* someString = @"random";
callback(@[someString]);
}
@end
这是出现错误的代码行:OsonOptions*OsonOptions=[[OsonOptions alloc]init] 根据Swift初始化规则,创建实例时必须初始化所有属性。因此,缺省初始值设定项init不向ObjC公开
您必须使用指定的初始值设定项initisWebview:key:token:products:env:clientName:或将默认值分配给所有属性。@Oto有几个问题,为什么您的初始值设定项在obj-c中不可见: init未标记为@objc 环境在objc中也可能无法表示 举个例子: //为了测试目的 @objc公共类环境:NSObject{} @objc公共类OsonOptions:NSObject{ @objc var isWebview:Bool @objc变量键:字符串 @objc变量标记:字符串 @objc var产品:阵列 var-env:环境 @objc var客户端名称:字符串 @objc public initisWebview:Bool,key:String,token:String,products:Array,env:Environment,clientName:String{ self.isWebview=isWebview self.key=key self.token=token self.products=产品 self.env=env self.clientName=clientName } } 用法如下: OsonOptions*oson=[[OsonOptions alloc]initWithIsWebview:是 key:@key 代币:@ 产品:@[] 环境:环境 客户名称:@];
如果你不能做出环境目标并继承NSObject,你可以考虑创建另一个类,比如环境互操作(ObjialEndoP)之类的东西,它可以在Objc中工作,并且可以将其转换成环境对象。 然后为objc互操作性声明另一个init
另一方面,由于属性不会被初始化,默认init无论如何都无法公开。因此,要么提供默认值并声明@objc init{},要么声明我在上面写的内容。如何使用指定的初始化器`initisWebview:key:token:products:env:clientName:`在objective C中init方法不会出现在自动完成建议中methods@Oto-ObongEshiett,我可能不会在自动完成中显示,但是,一旦您正确写入所有参数,它将接受它。