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

标签 swift completion-block

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/

相关文章:

swift - 开括号后的参数

ios - 火力地堡 + swift : Bypass User Login Screen

ios - 用于 MIDI 播放和录音的 AVAudioEngine 同步

ios - 在 MZFormSheetController 中使用 didDismissCompletionHandler

iphone - 用户与 uiview 和动画完成 block 的交互

swift - 尝试使用 AVFoundation AVAssetWriter 将 Metal 帧写入 Quicktime 文件时出现全黑帧

ios - 为什么我不能在 Swift 中重新分配实例方法?

ios - 创建一个不返回任何内容但在完成时执行另一个函数的完成 block ?

swift - 向 CloudKit 函数添加完成 block