菜鸟教程小白 发表于 2022-12-11 18:18:19

ios - 带有完成处理程序的函数,执行何时完成?


                                            <p><p>假设我有以下函数定义:</p>

<pre><code>func validResponse(data: Data?, response: URLResponse?, error: Error?, viewController: UIViewController, context: String?, withCompletion completion: @escaping (Bool?, String?) -&gt; ()) {
</code></pre>

<p>然后在这个函数里面我有:</p>

<pre><code>case 500: //internal server error
    debug.log(tag: &#34;NetworkHelper&#34;, content: &#34;\(response!.url!.path) returned 500. Payload: \(NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!)&#34;)

    completion(true, &#34;500, internal server error&#34;)

    print(&#34;do something&#34;)
</code></pre>

<p><code>print("do something")</code> 会被执行吗?我不想这样做,但想知道在所有完成调用之后是否应该包含 <code>return</code> ?</p>

<p>编辑:假设我有一堆这样的代码:</p>

<pre><code>if data == nil {
    debug.log(tag: &#34;NetworkHelper&#34;, content: &#34;Error, did not receive any data on \(response!.url!.path)&#34;)
    completion(false, &#34;No data was received from the server&#34;)
}

if error != nil {
    debug.log(tag: &#34;NetworkHelper&#34;, content: &#34;Error, calling GET on \(response!.url!.path)&#34;)
    debug.log(tag: &#34;NetworkHelper&#34;, content: error!.localizedDescription)
    completion(false, genericError)
}
</code></pre>

<p>是否需要在每次 <code>completion</code> 调用后调用 return?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>完成只是功能。如果你想在调用这个函数之后执行一些东西,你只需在完成调用之后添加这个代码。如果你不想在完成后调用任何代码,就不要写这段代码。</p>

<p>你应该使用 <em>guard</em> 来检查 nil 大小写:</p>

<pre><code>guard let data = data else { return }
debug.log(tag: &#34;NetworkHelper&#34;, content: &#34;Error, did not receive any data on \(response!.url!.path)&#34;)
      completion(false, &#34;No data was received from the server&#34;)
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 带有完成处理程序的函数,执行何时完成?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/45141136/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/45141136/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 带有完成处理程序的函数,执行何时完成?