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文档是非常好的资源。谢谢。我知道现在还没有什么“懒散的让”,只要有一个聪明的解决方法就行了。谢谢你的回答。勾选正确的一个。