Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在objective-c类中使用swift对象时,“init”不可用_Objective C_Swift - Fatal编程技术网

尝试在objective-c类中使用swift对象时,“init”不可用

尝试在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

我有一个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<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,我可能不会在自动完成中显示,但是,一旦您正确写入所有参数,它将接受它。