Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.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
Ios 将桥接的Swift类型传递到需要AnyObject的泛型函数中_Ios_Objective C_Swift_Generics - Fatal编程技术网

Ios 将桥接的Swift类型传递到需要AnyObject的泛型函数中

Ios 将桥接的Swift类型传递到需要AnyObject的泛型函数中,ios,objective-c,swift,generics,Ios,Objective C,Swift,Generics,我有一个Objective-C方法,它需要一个类: @接口A:NSObject +(id)生产类:(类)cls; @结束 我当前从Swift调用此代码的代码如下: 生产某物(属于:X.self)作为?X 我想从Swift中调用此逻辑,但也要使用泛型: 扩展A{ //T需要符合'AnyObject',否则编译将失败,因为 //Objective-C版本需要一个“类”` func-typedProductsomething(属于cls:T.Type)->T{ 将某物(属于:T.self)作为?T

我有一个Objective-C方法,它需要一个类:

@接口A:NSObject
+(id)生产类:(类)cls;
@结束
我当前从Swift调用此代码的代码如下:

生产某物(属于:X.self)作为?X 我想从Swift中调用此逻辑,但也要使用泛型:

扩展A{
//T需要符合'AnyObject',否则编译将失败,因为
//Objective-C版本需要一个“类”`
func-typedProductsomething(属于cls:T.Type)->T{
将某物(属于:T.self)作为?T返回
}
}
对于符合
NSObject
T
,这可以正常工作:

类SomeNSObject:NSObject{}
//没有编译错误
让someInstance=A.typedProduceSomething(of:SomeNSObject.self)
但是,如果使用值语义类型调用泛型方法,即使该类型可以桥接到Objective-C,它也会失败:

//编译错误
A.typedProduceSomething(属于:String.self)
如果我使用桥接类型调用它,那么返回值是可选的,因此我无法将其转换回:

//编译错误,无法转换NSString?串?
让someInstance:字符串?=A.typedProduceSomething(of:NSString.self)
//旧方法仍然有效
让someInstance:String=A.produceSomething(of:NSString.self)作为?一串

有没有办法让
typedproductsomething
使用桥接到Objective-C的值类型?

A.typedproductsomething(of:NSString.self)as?String
?这违背了泛型的目的,因为我仍然必须在函数调用之外执行强制转换
A.typedProduceSomething(of:NSString.self)as?String
?这违背了泛型的目的,因为我仍然必须在函数调用之外执行强制转换