语法“Selector”Swift 2.2

时间:2016-03-22 06:48:02

标签: swift

我正在尝试修复我的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: {
        });
        }

5 个答案:

答案 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
}