是否有一种方法可以在swift中打印变量的运行时类型?例如:
var now = NSDate()
var soon = now.dateByAddingTimeInterval(5.0)
println("\(now.dynamicType)")
// Prints "(Metatype)"
println("\(now.dynamicType.description()")
// Prints "__NSDate" since objective-c Class objects have a "description" selector
println("\(soon.dynamicType.description()")
// Compile-time error since ImplicitlyUnwrappedOptional<NSDate> has no "description" method
在上面的例子中,我正在寻找一种方法来显示变量“soon”的类型是ImplicitlyUnwrappedOptional<NSDate>,或至少NSDate!
当使用Cocoa(而不是CocoaTouch)时,你可以为NSObject的子类对象使用className属性。
println(now.className)
这个属性对于普通的Swift对象是不可用的,它不是NSObject的子类(事实上,在Swift中没有根id或对象类型)。
class Person {
var name: String?
}
var p = Person()
println(person.className) // <- Compiler error
在CocoaTouch中,此时没有办法获得给定变量类型的字符串描述。类似的功能在Cocoa或CocoaTouch中也不存在。
Swift REPL能够打印出值的摘要,包括它的类型,所以这种内省方式可能在未来通过API实现。
编辑:转储(对象)似乎做的把戏。
当使用Cocoa(而不是CocoaTouch)时,你可以为NSObject的子类对象使用className属性。
println(now.className)
这个属性对于普通的Swift对象是不可用的,它不是NSObject的子类(事实上,在Swift中没有根id或对象类型)。
class Person {
var name: String?
}
var p = Person()
println(person.className) // <- Compiler error
在CocoaTouch中,此时没有办法获得给定变量类型的字符串描述。类似的功能在Cocoa或CocoaTouch中也不存在。
Swift REPL能够打印出值的摘要,包括它的类型,所以这种内省方式可能在未来通过API实现。
编辑:转储(对象)似乎做的把戏。