SORU
3 HAZİRAN 2014, Salı


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
17 AĞUSTOS 2014, Pazar


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.

Mike Ash has a great blog entry covering the same topic.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Glove and Boots

    Glove and Bo

    1 ŞUBAT 2007
  • National Geographic

    National Geo

    7 Mayıs 2006
  • undrmyumbrellaa

    undrmyumbrel

    25 Temmuz 2012