Ne kadar Hızlı bir değişken türü veya sınıfı yazdırabilirim?
Bir şekilde hızlı bir yazdırma değişken çalışma zamanı türü var mı? Örneğin:
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
Yukarıdaki örnekte, bir değişken "yazın ImplicitlyUnwrappedOptional<NSDate>
, ya da en azından NSDate!
." yakında göstermek için arıyorum
CEVAP
Böyle büyük mükafat 6.3 sürüm notları:
@nschum Xcode 6.3 release notes başka bir yol gösterebilir bu açıklamalarda puan:
Türü değerleri ile kullanıldığında tam demangled tür adı olarak Yazdır sertifika veya dize aradeğerleme.
import Foundation
class PureSwiftClass { }
var myvar0 = NSString() // Objective-C class
var myvar1 = PureSwiftClass()
var myvar2 = 42
var myvar3 = "Hans"
println( "toString(myvar0.dynamicType) -> \(myvar0.dynamicType)")
println( "toString(myvar1.dynamicType) -> \(myvar1.dynamicType)")
println( "toString(myvar2.dynamicType) -> \(myvar2.dynamicType)")
println( "toString(myvar3.dynamicType) -> \(myvar3.dynamicType)")
println( "toString(Int.self) -> \(Int.self)")
println( "toString((Int?).self -> \((Int?).self)")
println( "toString(NSString.self) -> \(NSString.self)")
println( "toString(Array<String>.self) -> \(Array<String>.self)")
Çıkışları:
toString(myvar0.dynamicType) -> __NSCFConstantString
toString(myvar1.dynamicType) -> KC_Debug.PureSwiftClass
toString(myvar2.dynamicType) -> Swift.Int
toString(myvar3.dynamicType) -> Swift.String
toString(Int.self) -> Swift.Int
toString((Int?).self -> Swift.Optional<Swift.Int>
toString(NSString.self) -> NSString
toString(Array<String>.self) -> Swift.Array<Swift.String>
Böyle büyük mükafat için güncelleme 6.3:
_stdlib_getDemangledTypeName()
: kullanabilirsiniz
println( "TypeName0 = \(_stdlib_getDemangledTypeName(myvar0))")
println( "TypeName1 = \(_stdlib_getDemangledTypeName(myvar1))")
println( "TypeName2 = \(_stdlib_getDemangledTypeName(myvar2))")
println( "TypeName3 = \(_stdlib_getDemangledTypeName(myvar3))")
ve çıkış olarak bu
TypeName0 = NSString
TypeName1 = __lldb_expr_26.PureSwiftClass
TypeName2 = Swift.Int
TypeName3 = Swift.String
Orijinal cevabı:
6.3 _stdlib_getTypeName
Güncellemelerinden önce bir değişken karıştırılmış adı yazın. Ewan Swick's blog entry Bu dizeleri çözmek için yardımcı olur:
örneğin _TtSi
Swift Int
iç türü için duruyor.
Nasıl özel yöntemleri, alanları veya i...
Nasıl değişken olup olmadığını belirle...
Neden `1000000000000000 aralığı(100000...
Hangisi daha hızlı: while(1) veya(2)?...
Neden Java Vector sınıfı eski veya kul...