Cập nhật tháng 9 năm 2016
Swift 3.0: Sử dụng type(of:)
, ví dụ type(of: someThing)
(vì dynamicType
từ khóa đã bị xóa)
Cập nhật tháng 10 năm 2015 :
Tôi đã cập nhật các ví dụ bên dưới thành cú pháp Swift 2.0 mới (ví dụ: println
đã được thay thế bằng print
, toString()
bây giờ String()
).
Từ ghi chú phát hành Xcode 6.3 :
@nschum chỉ ra trong các nhận xét rằng ghi chú phát hành Xcode 6.3 cho thấy một cách khác:
Nhập các giá trị bây giờ in dưới dạng tên loại được sắp xếp đầy đủ khi được sử dụng với phép nội suy println hoặc chuỗi.
import Foundation
class PureSwiftClass { }
var myvar0 = NSString() // Objective-C class
var myvar1 = PureSwiftClass()
var myvar2 = 42
var 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)")
Đầu ra nào:
String(myvar0.dynamicType) -> __NSCFConstantString
String(myvar1.dynamicType) -> PureSwiftClass
String(myvar2.dynamicType) -> Int
String(myvar3.dynamicType) -> String
String(Int.self) -> Int
String((Int?).self -> Optional<Int>
String(NSString.self) -> NSString
String(Array<String>.self) -> Array<String>
Cập nhật cho Xcode 6.3:
Bạn có thể sử dụng _stdlib_getDemangledTypeName()
:
print( "TypeName0 = \(_stdlib_getDemangledTypeName(myvar0))")
print( "TypeName1 = \(_stdlib_getDemangledTypeName(myvar1))")
print( "TypeName2 = \(_stdlib_getDemangledTypeName(myvar2))")
print( "TypeName3 = \(_stdlib_getDemangledTypeName(myvar3))")
và lấy điều này làm đầu ra:
TypeName0 = NSString
TypeName1 = __lldb_expr_26.PureSwiftClass
TypeName2 = Swift.Int
TypeName3 = Swift.String
Câu trả lời gốc:
Trước Xcode 6.3 _stdlib_getTypeName
có tên loại được đọc sai của một biến. Mục blog của Ewan Swick giúp giải mã các chuỗi này:
ví dụ: _TtSi
viết tắt của Int
kiểu nội bộ của Swift .
Mike Ash có một mục blog tuyệt vời bao gồm cùng một chủ đề .