所以我最近遇到了一个问题,我还没有想出如何解决。我的应用程序按以下方式设置:
视图创建引擎并将自身设置为委托。引擎创建请求并将其传递给网络类,然后通过委托向引擎类报告。引擎执行它需要做的任何事情,将其存储在DB中,然后通过委托通知视图。
这一切都很好,花花公子,不需要单身,一切都很棒。但是,问题是对View B的网络调用需要一些时间。当用户仍然在View A上时,我想调用它。因为每个视图都保留了它自己的引擎实例,所以我可以从View A调用网络,但引擎实例视图B不会意识到它。
我想在这个例子中,一旦网络调用被处理,引擎类就可以发送NSNotification。这种方式即使有两个不同的引擎实例,View也会收到通知。我喜欢使用单身人士,但我们的建筑师热情地讨厌他们。
答案 0 :(得分:1)
我不知道我是否理解,但看起来你可以使用NotificationCenter进行这种沟通,就像你说的那样
因此,在您的视图类中,您可以添加一个通知观察器,它将调用您视图的某个方法,例如更新UI :(在swift 4中)
let nc = NotificationCenter.default
nc.addObserver(self,
selector: #selector(updateViewMethod),
name: NSNotification.Name(rawValue: "someName"),
object: nil)
在您的引擎类中,当您收到请求的响应时,您可以使用与视图类相同的名称发布通知,如果需要,您可以在userInfo字典上传递任何数据:
let nc = NotificationCenter.default
nc.post(name: NSNotification.Name(rawValue: "someName"),
object: nil,
userInfo: [“some_key”:”any_value_(any value)”])
就像你说的那样,视图类的任何实例都会调用“updateViewMethod”方法,如果你想发送单独的通知,你必须在实例化A和B的视图和引擎时指定通知的名称,例如,在您的视图和引擎类中,您可以创建一个名为“notificationName”的变量,并为A和B实例添加不同的值,因此您可以查看类通知:
let nc = NotificationCenter.default
nc.addObserver(self,
selector: #selector(updateViewMethod),
name: NSNotification.Name(rawValue: notificationName),
object: nil)
和引擎:
let nc = NotificationCenter.default
nc.post(name: NSNotification.Name(rawValue: notificationName),
object: nil,
userInfo: [“some_key”:”any_value_(any value)”])
希望在某种程度上有所帮助。