Ios 无法转换类型为';(视图控制器)>;()->;()';到预期的参数类型';()->;()';
我有一个类,它有一个接受闭包的函数Ios 无法转换类型为';(视图控制器)>;()->;()';到预期的参数类型';()->;()';,ios,swift,closures,Ios,Swift,Closures,我有一个类,它有一个接受闭包的函数 class MyFetcher { public func fetchData(searchText: String, onResponse: @escaping () -> (), showResult: @escaping (String) -> ()) } } 下面这样称呼就好了 class ViewContr
class MyFetcher {
public func fetchData(searchText: String,
onResponse: @escaping () -> (),
showResult: @escaping (String) -> ())
}
}
下面这样称呼就好了
class ViewController: UIViewController {
private func fetchData(searchText: String) {
wikipediaFetcher.fetchData(searchText: searchText,
onResponse: stopIndicationAnimation,
showResult: showResult)
}
private func stopIndicationAnimation() {
// Do something
}
private func showResult(data: String) {
// Do something
}
}
但是,当我将闭包更改为MyFetcher
的类参数时,如下所示
class MyFetcher {
private let onResponse: () -> ()
private let showResult: (String) -> ()
init (onResponse: @escaping () -> (),
showResult: @escaping (String) -> ()) {
self.onResponse = onResponse
self.showResult = showResult
}
public func fetchData(searchText: String)
}
}
按下面的方式调用它就是给出错误声明
无法将类型为“(ViewController)->()->()”的值转换为预期的参数类型“()->()”
我做错了什么?发生错误的原因是,您正在将
wikipediaFetcher
初始化为ViewController
的属性,然后它才可用wikipediaFetcher
。尝试将其加载为惰性
class ViewController: UIViewController {
private lazy var wikipediaFetcher = WikipediaFetcher(
onResponse: stopIndicationAnimation,
showResult: showResult
)
private func stopIndicationAnimation() {
// Do something
}
private func showResult(data: String) {
// Do something
}
}
出现此错误是因为您正在将
wikipediaFetcher
初始化为ViewController
的属性,然后它才可用wikipediaFetcher
。尝试将其加载为惰性
class ViewController: UIViewController {
private lazy var wikipediaFetcher = WikipediaFetcher(
onResponse: stopIndicationAnimation,
showResult: showResult
)
private func stopIndicationAnimation() {
// Do something
}
private func showResult(data: String) {
// Do something
}
}
我发誓我以前见过这个。。。回答你的问题了吗?基本上,
self
在变量初始化器中不可用。我发誓我以前见过这个。。。回答你的问题了吗?基本上,self
在变量初始化器中不可用。很好的一个。那就行了。我想知道我们是否仍然可以使用let
?没有选项提供lazy let
。有关更多详细信息,请查看。Swift文档是非常好的资源。谢谢。我知道现在还没有什么“懒散的让”,只要有一个聪明的解决方法就行了。谢谢你的回答。勾选正确的,不错的。那就行了。我想知道我们是否仍然可以使用let
?没有选项提供lazy let
。有关更多详细信息,请查看。Swift文档是非常好的资源。谢谢。我知道现在还没有什么“懒散的让”,只要有一个聪明的解决方法就行了。谢谢你的回答。勾选正确的一个。