:
enum Calculation {
case Number1(number: Int)
case Number2(number: Int)
var value:Int {
switch self {
case Number1(let number): return number + 1
case Number2(let number): return number + 2
}
}
}
または値として保存されてい関連する値:
enum CalculationType {
case Number1, Number2
}
enum Calculation {
case Number1(number: Int)
case Number2(number: Int)
init (type:CalculationType, number:Int) {
switch type {
case .Number1:
self = Calculation.Number1(number: number + 1)
case .Number2:
self = Calculation.Number2(number: number + 2)
}
}
}
あなたの質問は前者を指していますが、後者を期待しているのか、初期化が値を返すことを期待しているのかは、2番目のコードからはわかりません(init
は値を返しません)。最も近いものは、静的な機能を持っているだろう:
enum CalculationType {
case Number1, Number2
}
enum Calculation {
case Number1(number: Int)
case Number2(number: Int)
static func calc(type:CalculationType, number:Int) -> (Calculation, Int) {
switch type {
case .Number1:
return (Calculation.Number1(number: number), number + 1)
case .Number2:
return (Calculation.Number2(number: number), number + 2)
}
}
}
Calculation.calc(.Number1, number: 2)
別の方法としては、init
にコールバックを使用することもできます。
enum CalculationType {
case Number1, Number2
}
enum Calculation {
case Number1(number: Int)
case Number2(number: Int)
init (type:CalculationType, number:Int, callback:(Int) -> Void) {
switch type {
case .Number1:
self = Calculation.Number1(number: number)
callback(number + 1)
case .Number2:
self = Calculation.Number2(number: number)
callback(number + 2)
}
}
}
Calculation(type: .Number1, number: 10, callback: {n in print(n)})
この答えはあなたを助けるかもしれません。 http://stackoverflow.com/a/32530320/3222419 –
[Swift:クロージャを使用する列挙型]の複製がありますか?(http://stackoverflow.com/questions/31450971/swift-enums-that-use-closures) – bufh
''私はそれがもっと短くできるかどうか疑問に思っていた:例 "あなたが試してみて、あなたの例がうまくいかないことを知りましたか?どんな研究努力もしましたか?あなたの構文は本当に私にとって意味をなさない... – nhgrif