Swift是否等同于Objective-C的@encode
?
例如
@encode(void *) // -> @"^v"
搜索没有产生任何结果。
答案 0 :(得分:5)
不,没有 - 因为在引擎盖下Swift类不使用Objective-C内省来完成他们的工作。没有必要计算这个(就像在Objective-C中那样)来传递/调用数据。
但是,如果您需要在运行时动态使用它(比如,为了与现有的Objective-C方法进行互操作),那么您可以创建一个Objective-C调用并通过该对象或(对于简单类型)编写查找表
类型编码列在具有映射的https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html,并且可以编写执行查找的switch类型语句。
但从根本上说,如果你有一个你想要传入的类型并找到它的目标c编码类型,你可以使用NSObject的objCType方法:
var i = 1 as NSNumber
String.fromCString(i.objCType)! == "q"
如果你需要将它作为一个不受干扰的C字符串传递,你甚至可能不需要将它转换回Swift字符串类型。