我正在尝试修复我的NSNotificationCenter并且它无法正常工作
消息:
'Use of string literal for Objective-C selectors is deprecated; use '#selector' instead'.
这一行:
NSNotificationCenter.defaultCenter().addObserver(self, Selector :#selector(GameViewController.goBack)(GameViewController.goBack), object: nil)
self.dismissViewControllerAnimated(true, completion: {
});
}
答案 0 :(得分:16)
@ Eendje的回答是不正确的第一条评论。
我认为这是更好的答案。
NSNotificationCenter.defaultCenter().addObserver(self, #selector(self.goBack), name: "your notification name", object: nil)
如果某些操作具有目标,则应显示为#selector(target.method)
或#selector(target.method(_:))
这是另一个例子
UIGestureRecognizer(target: target action:#selector(target.handleGesture(_:))
答案 1 :(得分:8)
您粘贴的代码没有任何意义:
td
应该是:
Selector :#selector(GameViewController.goBack)(GameViewController.goBack) // ???
答案 2 :(得分:4)
你必须看看这个:https://github.com/apple/swift-evolution/blob/master/proposals/0022-objc-selectors.md
#selector
提案是与另一个提案一起提出的,通过参数标签指定了快速功能。所以,如果我有一个结构:
struct Thing
func doThis(this: Int, withOtherThing otherThing: Int) {
}
}
我会引用这个函数:
let thing = Thing()
thing.doThis(_:withOtherThing:)
请记住,我在这里引用了这个函数,而不是调用它。
您可以将其与#selector:
一起使用#selector(self.doThis(_:withOtherThing:)
没有参数的函数:
#selector(self.myFunction)
具有一个隐式参数的函数:
#selector(self.myOtherFunction(_:))
答案 3 :(得分:3)
是的,在Swift 2.2中,不推荐使用选择器的字符串文字,而是需要使用这个新的运算符#selector。
请参阅#selector的这个提议,并提供一些很好的例子:
https://github.com/apple/swift-evolution/blob/master/proposals/0022-objc-selectors.md
答案 4 :(得分:-2)
将@objc添加到您的选择器方法:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "YOUR_SELECTOR_METHOD:", name: "your notification name", object: nil)
@objc func YOUR_SELECTOR_METHOD(notification: NSNotification) {
//your code
}