如何调用swift方法,该参数是来自Objective C的协议

时间:2019-02-12 06:05:16

标签: ios objective-c swift

如何调用swift方法,该方法是来自Objective C的协议。

Class A
{
func sendMessage<Serializable: Encodable>(message:Serializable){
        let jsonData =   try! JSONEncoder().encode(message)

    }
}

目标C代码

A a = [[A alloc] init];
[a sendMessage] ;// Not Available

如何从Objective C调用此方法。

1 个答案:

答案 0 :(得分:3)

我认为sendMessage不会出现在已编译的TargetName-Swift.h中,因为Encodable中没有泛型和Objective-C协议。

使用时很清楚

sendMessage<Serializable: Encodable>(message:Serializable)

您使用泛型以及Encodable协议,该协议仅在Swift中可用,而在Objective-C中不可用

当您尝试访问Swift文件中的Objective-C函数时,编译器会创建与Objective-C函数等效的Swift /对应项,因此您会看到这些签名TargetName-Swift.h文件中的方法。

但是Generics中没有EncodableObjective-C协议,因此它无法使用GenericsEncodable协议将Swift函数转换为Objective- C等效。因此,您永远无法从Objective-C文件中调用此类Swift方法