A partir do Xcode 7 beta 5 (Swift versão 2) você pode agora imprimir nomes de tipo e casos de enumeração por padrão usando print(_:)
, ou converter para String
usar String
's init(_:)
sintaxe inicializador ou string de interpolação. Então, para o seu exemplo:
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"
Portanto, não há mais a necessidade de definir e manter uma função de conveniência que alterne em cada caso para retornar uma string literal. Além disso, isso funciona automaticamente para qualquer enumeração, mesmo que nenhum tipo de valor bruto seja especificado.
debugPrint(_:)
& String(reflecting:)
pode ser usado para um nome completo:
debugPrint(city)
// prints "App.City.Melbourne" (or similar, depending on the full scope)
let cityDebugName = String(reflecting: city)
// cityDebugName contains "App.City.Melbourne"
Observe que você pode personalizar o que é impresso em cada um destes cenários:
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)"
(Não encontrei uma maneira de chamar esse valor "padrão", por exemplo, para imprimir "A cidade é Melbourne" sem recorrer a uma declaração de chave. \(self)
na implementação de description
/ debugDescription
causa uma recursão infinita.)
Os comentários acima String
são init(_:)
&init(reflecting:)
initializers descrever exatamente o que é impresso, dependendo do que o conforma tipo refletida para:
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)
}
Consulte as notas de versão para obter informações sobre essa alteração.
print(enum)
você pode usarString(enum)