если у вас есть функция в Swift, которая выполняет замыкание, можете ли вы заставить параметр указывать только то, что в enum, как это делается с помощью init ()?
// function that takes a closure as a param
func calculator (n1: Int, n2: Int, operation: (Int, Int) -> Int) -> Int {
return operation(n1, n2)
}
// sample call. Note: I'd like the closure to be an enum so that the programmer can only pick from items listed in the enum.
let myCalc = calculator(n1: 5, n2: 6 ) {$0 * $1}
// list of valid choices in an enum
enum CalcOptions {
case Add {$0 + $1}
case Subtract {$0 - $1}
case Multiply {$0 * $1}
case Divide {$0 / $1}
}
// Note: this gives an error (can't have the closure on the same line), I'd like the elements in CalcOptions to be closures.
// I can't do this because it's not a type listed:
var calcClosure: Closure {
switch self {
case .Add: return {$0 + $1}
case .Subtract: return {$0 - $1}
case .Multiply: return {$0 * $1}
case .Divide: return {$0 / $1}
}
}
Если вы хотитеограничьте использование только теми параметрами, которые перечислены в enum, как вы можете, когда вы устанавливаете init (), как бы вы это сделали?
AFAIK, когда вы используете enum в init (), он делает этоработать как тип данных, так что пользователь этого init может выбирать только из списка, который появляется.
Я хотел бы иметь такую же функциональность в функции, чтобы пользователь мог выбирать только изэлементы, перечисленные в перечислении.
Пример в классе, где customerChosenType ограничен CarType в init () ... когда пользователь выбирает этот init, он получает всплывающее окно в Xcode, которое ограничивает ввод доперечисление перечисления:
enum CarType {
case Sedan
case Coupe
case Hatchback
case FastBack
}
init(customerChosenType : CarType){
typeOfCar01 = customerChosenType
}