Tính đến Xcode 7 beta 5 (Swift phiên bản 2) bây giờ bạn có thể in tên loại và các trường hợp enum theo mặc định sử dụng print(_:)
, hoặc chuyển đổi để String
sử dụng String
's init(_:)
cú pháp khởi tạo hoặc chuỗi suy. Vì vậy, ví dụ của bạn:
enum City: Int {
case Melbourne = 1, Chelyabinsk, Bursa
}
let city = City.Melbourne
print(city)
// prints "Melbourne"
let cityName = "\(city)" // or `let cityName = String(city)`
// cityName contains "Melbourne"
Vì vậy, không còn cần phải xác định và duy trì chức năng tiện lợi chuyển đổi trên từng trường hợp để trả về một chuỗi ký tự. Ngoài ra, điều này hoạt động tự động cho bất kỳ enum nào, ngay cả khi không có loại giá trị thô nào được chỉ định.
debugPrint(_:)
& String(reflecting:)
có thể được sử dụng cho một tên đủ điều kiện:
debugPrint(city)
// prints "App.City.Melbourne" (or similar, depending on the full scope)
let cityDebugName = String(reflecting: city)
// cityDebugName contains "App.City.Melbourne"
Lưu ý rằng bạn có thể tùy chỉnh nội dung được in trong mỗi trường hợp sau:
extension City: CustomStringConvertible {
var description: String {
return "City \(rawValue)"
}
}
print(city)
// prints "City 1"
extension City: CustomDebugStringConvertible {
var debugDescription: String {
return "City (rawValue: \(rawValue))"
}
}
debugPrint(city)
// prints "City (rawValue: 1)"
(Tôi chưa tìm được cách gọi vào giá trị "mặc định" này, ví dụ, để in "Thành phố là Melbourne" mà không cần dùng đến câu lệnh chuyển đổi. Sử dụng \(self)
trong việc thực hiện description
/ debugDescription
gây ra đệ quy vô hạn.)
Các ý kiến trên String
's init(_:)
& init(reflecting:)
initializers mô tả chính xác những gì được in, tùy thuộc vào những gì các loại chiếu theo phản ánh tới:
extension String {
/// Initialize `self` with the textual representation of `instance`.
///
/// * If `T` conforms to `Streamable`, the result is obtained by
/// calling `instance.writeTo(s)` on an empty string s.
/// * Otherwise, if `T` conforms to `CustomStringConvertible`, the
/// result is `instance`'s `description`
/// * Otherwise, if `T` conforms to `CustomDebugStringConvertible`,
/// the result is `instance`'s `debugDescription`
/// * Otherwise, an unspecified result is supplied automatically by
/// the Swift standard library.
///
/// - SeeAlso: `String.init<T>(reflecting: T)`
public init<T>(_ instance: T)
/// Initialize `self` with a detailed textual representation of
/// `subject`, suitable for debugging.
///
/// * If `T` conforms to `CustomDebugStringConvertible`, the result
/// is `subject`'s `debugDescription`.
///
/// * Otherwise, if `T` conforms to `CustomStringConvertible`, the result
/// is `subject`'s `description`.
///
/// * Otherwise, if `T` conforms to `Streamable`, the result is
/// obtained by calling `subject.writeTo(s)` on an empty string s.
///
/// * Otherwise, an unspecified result is supplied automatically by
/// the Swift standard library.
///
/// - SeeAlso: `String.init<T>(T)`
public init<T>(reflecting subject: T)
}
Xem ghi chú phát hành để biết thông tin về sự thay đổi này.
print(enum)
bạn có thể sử dụngString(enum)