Я хочу создать метод класса, который принимает некоторые параметры и функцию.И я хочу, чтобы этот параметр функции имел значение по умолчанию.Итак, я делаю:
class Calculator {
func operate(n1: Int, n2: Int, _ f: ((Int, Int) -> Int)? = add) -> Int {
return (f ?? add)(n1, n2)
}
func add(n1: Int, n2: Int) -> Int {
return n1 + n2
}
}
Здесь f
- это параметр функции, который можно передавать (или нет, так как он необязательный).Я хочу добавить в качестве значения по умолчанию для f, поэтому если вы делаете:
Calculator().operate(n1: 10, n2: 20)
// not passing f causes add to be called
Проблема: это не компилируется, это говорит мне, что правильный тип для f
долженбыть: (Calculator) -> (Int, Int) -> Int
.То есть: add
- это метод класса Calculator, который имеет смысл.
Но есть ли способ выразить этот метод как функцию?
IМожно определить внешнюю функцию, например:
func externalAdd(n1: Int, n2: Int) -> Int {
return n1 + n2
}
Тогда все работает как положено, если я изменяю значение по умолчанию f
:
class Calculator {
func operate(n1: Int, n2: Int, _ f: ((Int, Int) -> Int)? = externalAdd) -> Int {
return (f ?? add)(n1, n2)
}
func add(n1: Int, n2: Int) -> Int {
return n1 + n2
}
}
Идеи?Это возможно?