我正在尝试在Swift中实现一个通知中心
对于给定的typealias(我不想改变这个)
typealias Observer =(_ name:String,_ data:Any) - >空虚你可以……
Observer 是一个函数的别名,所以 name 基本上是一个参数,你不能这样做。
Observer
name
typealias Observer = (_ name: String, _ data: Any) -> Void var observers = [Observer]() func observer1(_ name: String, _ data: Any) { } func observer2(_ name: String, _ data: Any) { } func observer3(_ name: String, _ data: Any) { } func observer4(_ name: String, _ data: Any) { } observers.append(observer1) observers.append(observer2) observers.append(observer3) observers.append(observer4) observers.forEach { (observer) in print(observer) // Just "()" }
你只需要使用字典 [String: Observer] 如下:
[String: Observer]
typealias Observer = (_ name: String, _ data: Any) -> String let obs: Observer = { (name, data) in return name } let obs1: Observer = { (name, data) in return name } var observers = [String: Observer]() observers[obs("MyObs", "some data")] = obs observers[obs1("MyObs1", "some data")] = obs1 print(observers) observers["MyObs"] = nil print(observers)
输出是:
"["MyObs": (Function), "MyObs1": (Function)]\n" "["MyObs1": (Function)]\n"