gpt4 book ai didi

swift - 完成 block 不返回任何内容

转载 作者:行者123 更新时间:2023-11-30 10:06:35 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com