import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
isSuccess(true, success: { (name) -> String in
return "My name is \(name)"
})
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func isSuccess(val:Bool, success: (name: String) -> String) {
if val {
success(name: "Jacky")
}
}
}
我希望它返回字符串“My name is Jacky”,但它没有。但是如果我将 isSuccess
更改为:
func isSuccess(val:Bool, success: (name: String) -> String) {
if val {
print(success(name: "Jacky"))
}
}
}
然后就正常了,这是为什么呢?提前致谢!
最佳答案
您的完成 block 返回一个字符串。 当您通过调用
调用它时success(name: "Jacky")
完成 block 返回字符串 My name is Jacky。但你对那个字符串什么也不做。您刚刚退回并从未使用过它。 在第二个示例中,您实际上使用了它 - 您从完成 block 中获取了字符串,并将其打印出来。
例如,您也可以编写而不是打印
let stringFromCompletionBlock = success(name: "Jacky")
这样你就可以看到它确实返回了一个值。
<小时/>另一件事是,完成 block 应该作为函数中的最后一件事来调用 - 这样你“通知”函数已经完成了它的目的,所以使用从内部完成 block 返回的值是不合理的调用该完成 block 的相同函数
关于swift - 完成 block 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35600516/