ios - 如何使用闭包在两个 ViewController 之间传递数据

标签 ios iphone swift swift3 closures

我想知道如何使用闭包传递数据。我知道存在三种类型的数据传递方法:

  • 代表

  • 通知中心

  • 关闭

我想用一个例子来正确说明闭包。

最佳答案

使用 block /闭包很好地传递数据是一种很好且合理的方法,并且比通知要好得多。 下面是相同的代码。

第一个 ViewController(在其中创建第二个 ViewController 的对象)

 @IBAction func push(sender: UIButton) {
        let v2Obj = storyboard?.instantiateViewControllerWithIdentifier("v2ViewController") as! v2ViewController
        
        v2Obj.completionBlock = {[weak self] dataReturned in
            //Data is returned **Do anything with it **
            print(dataReturned)
        }
        navigationController?.pushViewController(v2Obj, animated: true)
        
    }

第二个 ViewController(数据传回第一个 VC)

import UIKit
typealias v2CB = (infoToReturn :String) ->()
class v2ViewController: UIViewController {
        var completionBlock:v2CB?
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func returnFirstValue(sender: UIButton) {
        guard let cb = completionBlock else {return}
        cb(infoToReturn: "any value")
    }
    
}

关于ios - 如何使用闭包在两个 ViewController 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44540818/

相关文章:

iOS 应用向右移动,无法查看完整表格

iphone - 没有已知的选择器'JSONValue'实例方法

Swift Pong(无 SpriteKit): Detect side of paddle that the ball hit

swift - 为什么 Swift 隐式解包可选 `nil` ?

iphone - 协议(protocol)方法未被调用,显示委托(delegate) 'nil'

ios - 成功登录后无法关闭 UIViewController

ios - 如何在 App Store 上发布 iOS 应用程序,但不允许 iPad 兼容?

swift - 成功登录或注册时隐藏按钮

ios - CGImageSourceCopyPropertiesAtIndex 不返回关键字和其他 Photos.app 字段

iphone - avaudioplayer播放进度