[解決済み] switch 文の外側で Swift の enum に関連付けられた値にアクセスする方法
2023-07-31 23:50:03
質問
考えてみましょう。
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
}
let leftEdge = Line.Horizontal(0.0)
let leftMaskRightEdge = Line.Horizontal(0.05)
どうすればアクセスできるかというと、例えば
lefEdge
の関連する値に、switch 文を使わずに直接アクセスするにはどうしたらよいでしょうか?
let noIdeaHowTo = leftEdge.associatedValue + 0.5
これではコンパイルすらできない!
私は これらの ソ 質問 を参照してください。しかし、どの回答もこの問題に対処していないようです。
は
noIdeaHowTo
をコンパイルしない行は、本当はこの一行であるべきなのです。
associated value
は任意の型であることができるので、ユーザー コードがどのように "generic" get または le enum 自体の associatedValue メソッドさえ書くことができるかさえ分かりません。
最終的にこうなりましたが、これはひどいもので、ケースを追加/修正するたびにコードを見直す必要があります...。
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
var associatedValue: CGFloat {
get {
switch self {
case .Horizontal(let value): return value
case .Vertical(let value): return value
}
}
}
}
どなたかご指摘をお願いします。
どのように解決するのですか?
他の人が指摘しているように、これはSwift 2で一応可能になりました。
import CoreGraphics
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
}
let min = Line.Horizontal(0.0)
let mid = Line.Horizontal(0.5)
let max = Line.Horizontal(1.0)
func doToLine(line: Line) -> CGFloat? {
if case .Horizontal(let value) = line {
return value
}
return .None
}
doToLine(min) // prints 0
doToLine(mid) // prints 0.5
doToLine(max) // prints 1
関連
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] Pythonで'Enum'を表現するにはどうしたらいいですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] String型のenumを列挙する方法は?
-
[解決済み] Enum 値から文字列名
-
[解決済み] Swiftでenumの関連値を無視して比較する方法は?
-
[解決済み] Swiftのif letと論理AND演算子&&の使い分け
最新
-
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の関数との比較
-
[解決済み] Swift- Remove Push Notification Badge number?
-
[解決済み] Optional Boolの値をチェックする
-
[解決済み] Swiftで失敗しないイニシャライザーを実装するためのベストプラクティス
-
[解決済み] swiftでデータを16進文字列に変換する方法
-
[解決済み] Swiftによる文字列中の部分文字列のインデックス
-
[解決済み] rootViewControllerとアニメーションを入れ替える?
-
[解決済み] Swiftのコード実行をベンチマークするには?
-
[解決済み] Swift で Enumeration のアソシエーション値にアクセスする