Ab Xcode 7 Beta 5 (Swift Version 2) können Sie jetzt standardmäßig Typnamen und Aufzählungsfälle mit der Initialisierungs- oder Zeichenfolgeninterpolationssyntax drucken print(_:)
oder in diese konvertieren . Also für Ihr Beispiel: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"
Es ist also nicht mehr erforderlich, eine Komfortfunktion zu definieren und zu verwalten, die jeden Fall einschaltet, um ein Zeichenfolgenliteral zurückzugeben. Darüber hinaus funktioniert dies automatisch für jede Aufzählung, auch wenn kein Rohwerttyp angegeben ist.
debugPrint(_:)
& String(reflecting:)
kann für einen vollqualifizierten Namen verwendet werden:
debugPrint(city)
// prints "App.City.Melbourne" (or similar, depending on the full scope)
let cityDebugName = String(reflecting: city)
// cityDebugName contains "App.City.Melbourne"
Beachten Sie, dass Sie anpassen können, was in jedem dieser Szenarien gedruckt wird:
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)"
(Ich habe keine Möglichkeit gefunden, diesen "Standard" -Wert aufzurufen, um beispielsweise "Die Stadt ist Melbourne" zu drucken, ohne auf eine switch-Anweisung zurückzugreifen. Die Verwendung \(self)
bei der Implementierung von description
/ debugDescription
verursacht eine unendliche Rekursion.)
Die Kommentare über String
‚s init(_:)
& init(reflecting:)
initializers beschreiben genau das, was gedruckt wird, je nachdem , was die reflektierten Typ richtet sich:
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)
}
Siehe die Release Notes für Informationen zu dieser Änderung.
print(enum)
, können SieString(enum)