有没有简单的方法来告诉class
Swift中的实例变量是什么?在我习惯的基于JVM的语言中,你可以做类似的事情println(value.class)
来获得它的类.
在Swift中有相同的东西吗?
我在文档中最接近的是能够使用is
关键字进行"类型检查",但这只能帮我猜一点.
我遇到过一些情况,我认为我有一种类型,但实际上有另一种,并且不知道如何确定.
从beta 6开始,_stdlib_getTypeName
获取变量的错位类型名称.将其粘贴到空的操场上:
import Foundation class PureSwiftClass { } var myvar0 = NSString() // Objective-C class var myvar1 = PureSwiftClass() var myvar2 = 42 var myvar3 = "Hans" println( "TypeName0 = \(_stdlib_getTypeName(myvar0))") println( "TypeName1 = \(_stdlib_getTypeName(myvar1))") println( "TypeName2 = \(_stdlib_getTypeName(myvar2))") println( "TypeName3 = \(_stdlib_getTypeName(myvar3))")
输出是:
TypeName0 = NSString TypeName1 = _TtC13__lldb_expr_014PureSwiftClass TypeName2 = _TtSi TypeName3 = _TtSS
Ewan Swick的博客文章有助于破译这些字符串:
例如_TtSi
代表Swift的内部Int
类型.
Mike Ash有一篇很棒的博客文章,涵盖了相同的主题.
使用type.self
返回可以传递到接受一个类型级参数的方法的类型.例如,UILabel.self
可以传递给isKindOfClass
方法调用.可以通过dynamicType.description()
以下方式找到类的字符串表示:
var label = UILabel() println(label.dynamicType.description()) println(label.isKindOfClass(UILabel.self))
斯威夫特-3
var label = UILabel() println(type(of: label).description())
输出
UILabel为
true
这里有一些背景知识 - 有两个表达式需要注意:后缀自我表达和动态类型表达式.来自文档:
Postfix Self
后缀自我表达由一个表达式或一个类型的名称组成,紧接着是.self.它有以下形式:expression.self type.self第一个表单计算表达式的值.例如,x.self计算为x.
第二种形式评估类型的值.使用此表单可以将类型作为值进行访问.例如,因为SomeClass.self计算SomeClass类型本身,您可以将它传递给接受类型级参数的函数或方法
动态类型表达式
dynamicType表达式由一个表达式组成,后面紧跟着.dynamicType.它具有以下形式:expression.dynamicType表达式不能是类型的名称.整个dynamicType表达式求值为表达式的运行时类型的值.