Swift中与@encode相对应的内容

21

是否有Swift等价于Objective-C的@encode?

例如

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

没有搜到任何结果。


1
考虑到我们甚至无法使用内省来确定对象的类型,我怀疑在Swift中是否存在类似的功能。不过,如果你找到了解决方案,那将为我的内省问题提供至少一个起点。看来还是值得关注的! - Jiaaro
1
你为什么需要这个?你能解释一下背景吗?也许有一个很好的Swift替代方案可以实现你想要做的事情。 - Stefan Arentz
@St3fan,我认为这是一个好问题,但是需要上下文,请参考此SO答案中的第一个代码块。 - Clay Bridges
2
我点赞了这个帖子,因为据我所知,目前似乎没有任何方法可以使用自定义结构初始化NSValue - John Estropia
1个回答

6
不需要,因为在 Swift 类中底层实现并不使用 Objective-C 的内省来完成工作。没有必要像 Objective-C 一样计算它以便传递/调用数据。但是,如果你需要在运行时动态地使用它(比如与现有的 Objective-C 方法进行交互),那么你可以创建一个 Objective-C 调用并通过对象传递,或者(对于简单类型)编写一个查找表。类型编码列在 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html 中,其中包含映射,并且可以编写一个 switch 类型语句来执行查找。但是,从根本上讲,如果你有一个想要传递并找到其 Objective-C 编码类型的类型,可以使用 NSObject 的 objCType 方法:
var i = 1 as NSNumber
String.fromCString(i.objCType)! == "q" 

如果您需要将其作为未改变的C字符串传递,那么甚至可能不需要将其转换回Swift字符串类型。

3
objCTypeNSValue 的方法,不是 NSObject 的。 - John Estropia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接