Swift相当于@encode

时间:2014-06-27 16:29:09

标签: objective-c swift

Swift是否等同于Objective-C的@encode

例如

@encode(void *) // -> @"^v"

搜索没有产生任何结果。

1 个答案:

答案 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字符串类型。