Ну, решение - это уведомления. Например, у вас есть класс:
class NotificationExampleClass {
var stringUpdatedByNotification: String = ""
}
Итак, основная идея уведомления является обновить некоторое значение (в нашем случае stringUpdatedByNotification
) сразу же, когда мы хотим (когда мы размещаем уведомление).
Перед тем, как отправлять уведомления, нам нужно добавить addObserver
/removeObserver
и функции, которые получают уведомление:
class NotificationExampleClass {
var stringUpdatedByNotification: String = ""
init() {
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "updateNotificationString:", // method called when notification have been received
name: "notificationId",
object: nil)
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self,
name: "notificationId",
object: nil)
}
func updateNotificationString(notification: NSNotification) {
let userInfo = notification.userInfo as! [String: String] // or unwrap to your custom key value pair type
stringUpdatedByNotification = userInfo["myKey"]!
}
}
А теперь мы просто должны установить наш userInfo
словарь и почтовое уведомление:
func postNotification() {
let userInfo = ["myKey" : "notificationPostValue"]
NSNotificationCenter.defaultCenter().postNotificationName("notificationId", object: userInfo)
}
и наш stringUpdatedByNotification
равен строке "notificationPostValue"
.
Не стесняйтесь обновлять код в своих ситуациях. Удачи.
Update:
Конечно, передать словарь, как [String: String]
к userInfo
более Obj-C способ сделать это вещи. В Swift (и в вашем конкретном случае) вы можете перейти на userInfo
все, что подтвердите на [NSObject : AnyObject]?
, потому что userInfo
объявлено как var userInfo: [NSObject : AnyObject]? { get }
. Так что, когда вы создаете что-то вроде уведомления потока управления, я предлагаю вам создать enum
для него:
А теперь перейдем к userInfo
это ["myKey": .UpdateToFiveSeconds]
.
В этом случае вы можете получить TimeControl
объект через notification.userInfo["key"]
, а не строку и избежать ошибки в String
значение.
Почему вы не отправляете уведомление? через NotificationCenter –