gpt4 book ai didi

swift - `#selector` 的参数未引用初始化程序或方法

转载 作者:搜寻专家 更新时间:2023-10-31 22:02:12 25 4
gpt4 key购买 nike

我正在尝试在后台执行协议(protocol)扩展方法:

performSelectorInBackground(#selector(retrieveCategories()), withObject: nil)

但是我收到以下错误消息:

Argument of `#selector` does not refer to an initializer or method

这是我的协议(protocol)声明:

@objc protocol DataRetrievalOperations {
optional func retrieveCategories()
...
}

还有我的分机:

extension DataRetrievalOperations {
func retrieveCategories() {
...
}
}

我怎样才能做到这一点?

最佳答案

试试这个:

#selector(DataRetrievalOperations.retrieveCategories)

#selector(...) 符号中省略了类(或协议(protocol))名称,Swift 假定封闭类,我猜它可能是一个 ViewController。


还有一个问题:似乎 Swift 无法在协议(protocol)扩展中使用默认实现来实现 @objc 协议(protocol)方法。(我想我听说过一些关于这方面的事情,但我现在找不到任何文章。)

您可能需要在您自己的类的扩展中实现它或寻找其他方式。

extension CategoriesViewController {
func retrieveCategories() {
//...
}
}

我需要补充一点,这将解决第一个问题,#selector(retrieveCategories) 将起作用。

关于swift - `#selector` 的参数未引用初始化程序或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38158643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com