我编写了一个以完成块作为参数的函数。当我在视图控制器中调用此函数时,不执行完成块。这是我第一次编写自己的自定义完成块,所以我可能只是犯了一个简单的错误。这是我模型中的功能:
func iterateThrough2(userInput: String, completion: (completed: Bool) -> Bool) -> Double {
while numberOfCharactersDone < userInput.characters.count {
let startIndex = userInput.startIndex.advancedBy(numberOfCharactersDone)
let letterIndex = userInput.characters[startIndex]
let letter = String(letterIndex)
if isLetter(letter) {
isALetter(letter, input: userInput)
}
else {
isNotLetter(letter)
}
numberOfCharactersDone++
}
return total
}
在我的视图控制器中,我称之为:
@IBAction func calculate(sender: UIButton) {
if let text = self.enteredText.text {
let result = calculator.iterateThrough2(text, completion: { (completed) -> Bool in
if completed {
print("good")
return true
}
else {
print("not good")
return false
}
})
self.outputLabel.text = String(result)
calculator.resetData()
}
}
该函数确实成功返回了一个double,但它正在以其他方式工作。它只是没有调用闭包。我做错了什么?
我是否必须在我的方法中包含并指定何时我想要运行闭包?我在这里阅读:https://www.codefellows.org/blog/writing-completion-blocks-with-closures-in-swift并尝试在我的方法结束时调用完成块,如:
completion(completed: completed)
return total
但是我收到错误“使用未解析的标识符”已完成“”