Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用Objective-C选择器声明方法时出错_Swift_Xcode7.3 - Fatal编程技术网

Swift 使用Objective-C选择器声明方法时出错

Swift 使用Objective-C选择器声明方法时出错,swift,xcode7.3,Swift,Xcode7.3,当我试图声明一个方法时,出现了以下错误: 代码如下: NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("itemDroppedOnCharacter:"), name: "onTargetDropped", object: nil) func itemDroppedOnCharacter(notif: AnyObject) { print("Item Dropped On Chara

当我试图声明一个方法时,出现了以下错误:

代码如下:

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("itemDroppedOnCharacter:"), name: "onTargetDropped", object: nil)

func itemDroppedOnCharacter(notif: AnyObject) {

    print("Item Dropped On Character")

}

我做错了什么?

选择器在Xcode 7.3中发生了更改。您需要显式声明属于类的选择器:

class MyClass {
    func someFunc() {
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyClass.itemDroppedOnCharacter(_:)), name: "onTargetDropped", object: nil)
    }

    @objc func itemDroppedOnCharacter(notif: AnyObject) {
        print("Item Dropped On Character")
    }
}
如果不想添加
@objc
以将选择器公开给Objective-C,也可以让
MyClass
继承自
NSObject

class MyClass: NSObject {
    func someFunc() {
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyClass.itemDroppedOnCharacter(_:)), name: "onTargetDropped", object: nil)
    }

    func itemDroppedOnCharacter(notif: AnyObject) {
        print("Item Dropped On Character")
    }
}

请注意,发布的代码与屏幕截图中的代码不同(因此会产生不同的警告消息)。有什么区别?我看不到。