2016年9月更新
Swift 3.0:使用
type(of:),例如
type(of: someThing)(因为
dynamicType关键字已删除)
2015年10月更新 :
我将下面的示例更新为新的Swift 2.0语法(例如,
println已被替换为
toString()现在是
String())。
从Xpre 6.3发行说明 :
@nschum在注释中指出Xpre
6.3发行说明显示了另一种方式:
现在,当与println或字符串插值一起使用时,类型值将打印为完整的取消组合类型名称。
import Foundationclass PureSwiftClass { }var myvar0 = NSString() // Objective-C classvar myvar1 = PureSwiftClass()var myvar2 = 42var myvar3 = "Hans"print( "String(myvar0.dynamicType) -> (myvar0.dynamicType)")print( "String(myvar1.dynamicType) -> (myvar1.dynamicType)")print( "String(myvar2.dynamicType) -> (myvar2.dynamicType)")print( "String(myvar3.dynamicType) -> (myvar3.dynamicType)")print( "String(Int.self)-> (Int.self)")print( "String((Int?).self -> ((Int?).self)")print( "String(NSString.self) -> (NSString.self)")print( "String(Array<String>.self) -> (Array<String>.self)")哪个输出:
String(myvar0.dynamicType) -> __NSCFConstantStringString(myvar1.dynamicType) -> PureSwiftClassString(myvar2.dynamicType) -> IntString(myvar3.dynamicType) -> StringString(Int.self)-> IntString((Int?).self -> Optional<Int>String(NSString.self) -> NSStringString(Array<String>.self) -> Array<String>
Xpre 6.3的更新:
您可以使用
_stdlib_getDemangledTypeName():
print( "TypeName0 = (_stdlib_getDemangledTypeName(myvar0))")print( "TypeName1 = (_stdlib_getDemangledTypeName(myvar1))")print( "TypeName2 = (_stdlib_getDemangledTypeName(myvar2))")print( "TypeName3 = (_stdlib_getDemangledTypeName(myvar3))")
并将其作为输出:
TypeName0 = NSStringTypeName1 = __lldb_expr_26.PureSwiftClassTypeName2 = Swift.IntTypeName3 = Swift.String
原始答案:
在Xpre 6.3之前,
_stdlib_getTypeName已经获得了变量的变形类型名称。Ewan
Swick的博客条目有助于破译以下字符串:
例如
_TtSi代表Swift的内部
Int类型。
迈克·阿什(Mike Ash)在同一个主题的博客文章中非常出色。



