我已经定义了一个在 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/