ในฐานะของ Xcode 7 Beta 5 (สวิฟท์รุ่นที่ 2) ตอนนี้คุณสามารถพิมพ์ชื่อประเภทและกรณี enum เริ่มต้นโดยใช้print(_:)
หรือแปลงเพื่อString
ใช้String
เป็นinit(_:)
ค่าเริ่มต้นหรือสตริงแก้ไขไวยากรณ์ ดังนั้นสำหรับตัวอย่างของคุณ:
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"
ดังนั้นจึงไม่จำเป็นที่จะต้องกำหนดและบำรุงรักษาฟังก์ชั่นอำนวยความสะดวกที่สลับในแต่ละกรณีเพื่อส่งคืนสตริงตามตัวอักษร นอกจากนี้สิ่งนี้จะทำงานโดยอัตโนมัติสำหรับ enum ใด ๆ แม้ว่าจะไม่ได้ระบุประเภทค่าดิบ
debugPrint(_:)
& String(reflecting:)
สามารถใช้สำหรับชื่อที่ผ่านการรับรองโดยสมบูรณ์:
debugPrint(city)
// prints "App.City.Melbourne" (or similar, depending on the full scope)
let cityDebugName = String(reflecting: city)
// cityDebugName contains "App.City.Melbourne"
โปรดทราบว่าคุณสามารถกำหนดสิ่งที่พิมพ์ในแต่ละสถานการณ์เหล่านี้:
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)"
(ฉันไม่พบวิธีเรียกค่านี้ "ค่าเริ่มต้น" ตัวอย่างเช่นการพิมพ์ "เมืองคือเมลเบิร์น" โดยไม่ต้องหันกลับไปใช้คำสั่งสลับใช้\(self)
ในการใช้description
/ debugDescription
ทำให้เกิดการเรียกซ้ำแบบไม่สิ้นสุด)
ความเห็นข้างต้นString
's init(_:)
& init(reflecting:)
initializers อธิบายว่าสิ่งที่พิมพ์ขึ้นอยู่กับสิ่งที่สะท้อนสอดชนิด:
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)
}
ดูบันทึกประจำรุ่นสำหรับข้อมูลเกี่ยวกับการเปลี่ยนแปลงนี้
print(enum)
คุณสามารถใช้String(enum)