如何调用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调用此方法。
答案 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
中没有Encodable
和Objective-C
协议,因此它无法使用Generics
和Encodable
协议将Swift函数转换为Objective- C等效。因此,您永远无法从Objective-C文件中调用此类Swift方法