因为我错误地选择了一个选择器名称,所以我想我会尝试使用块而不是选择器来做一些通知。
我已经汇总了一些似乎无法运作的示例代码,因为我无法访问自己
var currentString : String?
// Type alias the notificaitonBlock
typealias notificationBlock = (NSNotification?) -> ()
// in this case note is an NSNotification?
let strNotification : notificationBlock = { notification in
if let msg = notification?.object as? String {
self.currentString = msg
}
}
假设此代码有效,我会将其注册为:
nc.addObserverForName(UIDeviceOrientationDidChangeNotification,
object: self,
queue: NSOperationQueue.currentQueue(),
usingBlock: strNotification)
Xcode给了我以下错误:
NotificationTests.swift:49:4:' NotificationTests - > () - > NotificationTests'没有名为' currentString'
的成员这意味着自我不是指向班级,而是指向街区或什么?
答案 0 :(得分:1)
您可以在为块使用实例变量时使用它:
lazy var block: (NSNotification?) -> () = { notification in
if let msg = notification?.object as? String {
self.currentString = msg
}
}
或在方法调用中:
func registerObeserver() {
NSNotificationCenter.defaultCenter().addObserverForName(UIDeviceOrientationDidChangeNotification, object: self, queue: NSOperationQueue.currentQueue(), { notification in
if let msg = notification?.object as? String {
self.currentString = msg
}
})
}
正如Martin R在评论中提到的那样,这可能与一个类的一个属性有关,取决于另一个属性在初始化期间
与javascript不同,self在封闭内部不会改变