À partir de Xcode 7 beta 5 (Swift version 2), vous pouvez désormais imprimer les noms de type et les cas d'énumération par défaut en utilisant print(_:)
, ou convertir en String
utilisant String
l' init(_:)
initialiseur ou la syntaxe d'interpolation de chaîne. Donc pour votre exemple:
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"
Il n'est donc plus nécessaire de définir et de maintenir une fonction pratique qui active chaque cas pour renvoyer une chaîne littérale. De plus, cela fonctionne automatiquement pour toute énumération, même si aucun type de valeur brute n'est spécifié.
debugPrint(_:)
& String(reflecting:)
peut être utilisé pour un nom complet:
debugPrint(city)
// prints "App.City.Melbourne" (or similar, depending on the full scope)
let cityDebugName = String(reflecting: city)
// cityDebugName contains "App.City.Melbourne"
Notez que vous pouvez personnaliser ce qui est imprimé dans chacun de ces scénarios:
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)"
(Je n'ai pas trouvé de moyen d'appeler cette valeur "par défaut", par exemple, pour afficher "La ville est Melbourne" sans recourir à une instruction switch. L'utilisation \(self)
dans l'implémentation de description
/ debugDescription
provoque une récursivité infinie.)
Les commentaires ci - dessus String
de » init(_:)
& init(reflecting:)
initializers décrivent exactement ce qui est imprimé, en fonction de ce que répond le Type réfléchi à:
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)
}
Consultez les notes de version pour plus d'informations sur ce changement.
print(enum)
vous pouvez utiliserString(enum)