Swift 当需要self参数时,如何使用#selector调用另一个类中的函数?
我似乎无法从每个类中删除本地类函数,因为我不知道如何使用#选择器调用另一个类中的函数(当Self是必需参数时) 目前,我调用了一个本地函数,该函数调用得非常好:Swift 当需要self参数时,如何使用#selector调用另一个类中的函数?,swift,selector,self,Swift,Selector,Self,我似乎无法从每个类中删除本地类函数,因为我不知道如何使用#选择器调用另一个类中的函数(当Self是必需参数时) 目前,我调用了一个本地函数,该函数调用得非常好: class Tickets: UIViewController { override func viewWillAppear(_ animated: Bool) { NotificationCenter.default.addObserver(self, selector: #selector(setData
class Tickets: UIViewController {
override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(setDataIcon), name: NSNotification.Name(rawValue: "ActiveSyncRequestInitiated"), object: nil)
}
@objc func setDataIcon() {
global.setDataIcon(self) // called via #selector above, works
}
}
我宁愿删除本地函数setDataIcon并通过选择器调用它
#selector(global.setDataIcon(self)) // doesn't compile!
但是“#selector”的“I get error”参数没有引用“@objc”方法、属性或初始值设定项“选择器单词只能调用标记为@objc的方法。如果删除该方法或@objc限定符,#选择器将无法调用它。这就是为什么你会出错
如果您希望在类a中观察到一个通知来执行类B中的代码,我将看到一些选项
1.)在类A中创建类B的实例,并让类A方法中setDataIcon中的代码从类B的实例调用函数
2.)在setDataIcon中,发布B类观察到的通知,然后注册B类以观察该通知,并让B类在遵守时执行代码
3.)使用委托方法。确保在注册以观察通知之前,创建类B的实例并将其分配给类A的委托。然后,在setDataIcon内部,让委托(即类B)调用委托方法
查看您的注释,如果“global”是类A中类B的实例,那么global中的setDataIcon方法也需要使用@objc进行限定。(选项1)那么,global是另一类吗?我们能看到什么是全球性的吗?另外-您说要“删除本地函数
setDataIcon
并调用选择器”-您想在哪里调用它?您是否正在尝试执行类似于lambda/closure
?我希望我的addObserver调用看起来像:NotificationCenter.default.addObserver(self,selector:#selector(global.setDataIcon(self)),name:NSNotification.name(rawValue:“ActiveSyncRequestInitiated”),object:nil)至于我的全局类函数的内容,它引用了source:source.navigationItem.rightBarButtonItem=dataIconItem//其中source是调用它的UIViewController——选择器中我遇到问题的“self”。这本质上是您的问题。基本上,你目前的答案是解决这个问题最正确的方法。