首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用闭包在两个ViewController之间传递数据

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

Stack Overflow用户
提问于 2017-06-14 09:32:14
回答 2查看 10.3K关注 0票数 4

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

  • 代表
  • 通知中心
  • 闭锁

我想要用一个例子来正确地澄清结束。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-14 09:36:51

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

First ViewController (在这里您可以创建第二个ViewController的对象)

代码语言:javascript
运行
复制
 @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)

代码语言:javascript
运行
复制
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")
    }
    
}
票数 13
EN

Stack Overflow用户

发布于 2017-06-14 10:02:28

此示例解释了使用Alamofire调用服务的方法,并将响应发送回具有闭包的调用。

服务包装类中的代码:

闭包声明

代码语言:javascript
运行
复制
typealias CompletionHandler = (_ response: NSDictionary?, _ statusCode: Int?, _ error: NSError?) -> Void

闭包在方法中的实现

代码语言:javascript
运行
复制
    func doRequestFor(_ url : String, method: HTTPMethod, dicsParams : [String: Any]?, dicsHeaders : [String: String]?, completionHandler:@escaping CompletionHandler) {

        if !NetworkReachablity().isNetwork() {
            return
        }

        if (dicsParams != nil) {print(">>>>>>>>>>>>>Request info url: \(url) --: \(dicsParams!)")}
        else {print(">>>>>>>>>>>>>Request info url: \(url)")}

        Alamofire.request(url, method: method, parameters: dicsParams, encoding:
            URLEncoding.default, headers: dicsHeaders)

        .responseJSON { response in
            self.handleResponse(response: response, completionHandler: completionHandler)
        }
    }

调用视图控制器的代码:

代码语言:javascript
运行
复制
        ServiceWrapper().doRequestFor(url, method: .post, dicsParams: param, dicsHeaders: nil) { (dictResponse, statusCode, error) in

        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44540818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档