[解決済み】Swiftで列挙型の値の名前を取得する方法は?
質問
列挙に生の
Integer
の値を指定します。
enum City: Int {
case Melbourne = 1, Chelyabinsk, Bursa
}
let city = City.Melbourne
を変換するにはどうすればよいですか?
city
の値を文字列に変換します。
Melbourne
? このような型名イントロスペクションは、この言語では可能なのでしょうか?
のようなものです(このコードは動作しません)。
println("Your city is \(city.magicFunction)")
> Your city is Melbourne
解決方法は?
Xcode 7 beta 5 (Swift バージョン 2) では、型名と enum のケースをデフォルトで印刷することができます。
print(_:)
に変換するか、または
String
を使って
String
's
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)"
(この "default" 値を呼び出して、例えば、switch 文に頼らずに "The city is Melbourne" と表示する方法は見つかっていません。使用方法
\(self)
の実装では
description
/
debugDescription
は無限回想を引き起こす)
上記のコメント
String
's
init(_:)
&
init(reflecting:)
初期化子は、反映された型が何に準拠するかによって、表示される内容を正確に記述します。
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)
}
をご覧ください。
リリースノート
は、この変更についての情報です。
関連
-
[解決済み] swiftにおけるconvenience initとinitの違いは何ですか、より良い明示的な例
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] 文字列の長さを取得する
-
[解決済み] Swift カスタムオブジェクトの配列をプロパティ値でソートする方法
-
[解決済み] テキストファイルからの文字列の読み込みと書き込み
-
[解決済み】String.substringWithRangeはどのように使うのですか?(または、SwiftでRangeはどのように動作しますか?)
-
[解決済み】weak referenceとunowned referenceの違いは何ですか?
-
[解決済み]SwiftでErrorタイプでローカライズされた説明を提供する方法は?
-
[解決済み】ReactiveCocoaとRxSwiftの比較 - 長所と短所?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Swiftの辞書にキーが含まれているかどうかを判断し、その値を取得する。
-
[解決済み] Swiftでbase64StringをStringに変換する方法とは?
-
[解決済み] このコンテキストで型検索を行う場合、「メソッド」は曖昧である、Alamofireのエラー
-
[解決済み] Swiftで文字列が別の文字列を含んでいるかどうかを確認するには?
-
[解決済み] タイプ 'StorageMetadata' の値には、メンバー 'downloadURL' がありません。
-
[解決済み] Swiftのコンストラクタ
-
[解決済み] 2倍値を小数点以下x桁に丸める処理を素早く行う。
-
[解決済み] Swift で app delegate への参照を取得するにはどうすればよいですか?
-
[解決済み】swiftでDoubleを最も近いIntに丸めるには?
-
[解決済み] Swift: 列挙型の値を文字列に変換しますか?