Большое спасибо за ответ.На этом этапе я учусь писать замыкания.На самом деле я где-то читал о функции "forEach", которая работает с коллекциями и принимает в качестве параметра один аргумент (т. Е. Замыкание).
Синтаксис forEach: "Void forEach (body: (Int) throws ->)Void) rethrows "
То, что я пытаюсь сделать, это написать аналогичную функцию с одним параметром (т. Е. Замыканием), который вычислит факториал числа, и мы можем вывести факториал этого числа.Я не хочу передавать это число в качестве второго параметра этой функции.
Я понимаю, что forEach - это функция-член класса Collections, которая работает с каждым элементом по одному.Таким образом, он выбирает элементы из массива.Точно так же я создал частное свойство (factorialNumber) внутри моего класса (значение которого я могу установить, используя открытую функцию "setFactorialNumber").Теперь я пытаюсь создать публичную функцию (factorial) для моего класса, которая будет иметь только один параметр (т.е. замыкание), который будет использовать значение свойства «factorialNumber» внутри и вычислять факториал этого числа, который мы можем напечатать извнекогда мы вызываем эту функцию из другого кода.
Ниже мой класс ..
public class MyArray {
private var factorialNumber = 0
public func setFactorialNumber(factorialNumber value: Int) {
factorialNumber = value
}
public func factorial(body closure: (Int) -> Void) -> Void {
var outputString: String?
var result = 1
if factorialNumber <= 0 {
outputString = nil
} else {
outputString = ""
while(factorialNumber >= 1) {
if factorialNumber == 1 {
outputString = outputString! + "\(factorialNumber) = \(result)"
break
} else {
outputString = outputString! + "\(factorialNumber) x "
}
result = result * factorialNumber
factorialNumber -= 1
}
}
}
}