swift - 如何在 Swift 中创建 block 的多个实例?

标签 swift block

我已经定义了一个在 webservice 调用后返回的 block 。

typealias Receive  = ([AnyHashable : Any]) -> Void

func method(_ paramter: paramter, block:@escaping Register){
   //some code
}

我从 appDelegate.swift 调用了这个方法。

handler.shared.method(_ paramter) { (isGranted, token, error) in
   //some code
}

这按预期工作。

现在,如果我从 viewcontroller.swift 调用相同的方法,该 block 在获得响应后仅进入 viewcontroller。

我想创建同一个 block 的多个实例,这样当我收到响应时,它应该进入 appdelegate 以及 viewcntroller 的背景 block 。

最佳答案

这样做不是个好主意,但如您所愿,请遵循以下代码。

您可以将 block 添加到 whereToPassData 中,并在收到响应时通知所有人。

import Foundation
import UIKit

public class AppGlobalManager:NSObject {
    static let sharedManager = AppGlobalManager()

    private override init() {
        super.init()
        //This prevents others from using the default '()' initializer for this class.
    }

    var whereToPassData:[Register?] = []

    typealias Register  = ([AnyHashable : Any]) -> Void

    func method(_ paramter:Any, block:@escaping Register){
        //some code
        for ref in whereToPassData {
            ref?(["test":"test"])
        }
        self.whereToPassData.removeAll()
    }
}

public class yourvc :UIViewController {
    public override func viewDidLoad() {
        var block = { (test:[AnyHashable : Any]) in
        }

        AppGlobalManager.sharedManager.whereToPassData.append(block)
        AppGlobalManager.sharedManager.method(for: "test")
    }
}

关于swift - 如何在 Swift 中创建 block 的多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50741924/

相关文章:

ios - "Could not load NIB"子类化 FUIAuthPickerViewController 时

html - 包含行内 block 元素的 block 元素的高度

ruby - 如何将 block 传递给 `instance_eval` -ed block ?

c - 列出 block 大小的问题

swift - 我如何访问 Swift 的 REPL?

ios - swift 警告 : A lonng-running operation is being executed on the main thread

ios - UICollectionView 间距不相等

swift - 索引 Metal 缓冲区的问题

iOS - 执行 block 后从 heightForRowAtIndexPath 返回值

php - Magento - 从引用中删除 block