Pada Xcode 7 beta 5 (Swift versi 2) Anda sekarang dapat mencetak nama-nama jenis dan kasus enum secara default menggunakan print(_:)
, atau mengkonversi ke String
menggunakan String
's init(_:)
sintaks initializer atau interpolasi string. Jadi untuk contoh Anda:
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"
Jadi tidak ada lagi kebutuhan untuk mendefinisikan & memelihara fungsi kenyamanan yang mengaktifkan setiap case untuk mengembalikan string literal. Selain itu, ini berfungsi secara otomatis untuk enum apa pun, bahkan jika tidak ada tipe nilai mentah yang ditentukan.
debugPrint(_:)
& String(reflecting:)
dapat digunakan untuk nama yang sepenuhnya memenuhi syarat:
debugPrint(city)
// prints "App.City.Melbourne" (or similar, depending on the full scope)
let cityDebugName = String(reflecting: city)
// cityDebugName contains "App.City.Melbourne"
Perhatikan bahwa Anda dapat menyesuaikan apa yang dicetak dalam masing-masing skenario ini:
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)"
(Saya belum menemukan cara untuk memanggil nilai "default" ini, misalnya, untuk mencetak "Kota adalah Melbourne" tanpa menggunakan kembali ke pernyataan peralihan. Menggunakan \(self)
dalam implementasi description
/ debugDescription
menyebabkan rekursi tak terbatas.)
Komentar di atas String
's init(_:)
& init(reflecting:)
initializers menjelaskan dengan tepat apa yang dicetak, tergantung pada jenis sesuai tercermin ke:
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)
}
Lihat catatan rilis untuk info tentang perubahan ini.
print(enum)
Anda dapat menggunakanString(enum)