Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 多个完井区块_Ios_Swift_Protocol Buffers_Grpc - Fatal编程技术网

Ios 多个完井区块

Ios 多个完井区块,ios,swift,protocol-buffers,grpc,Ios,Swift,Protocol Buffers,Grpc,我遵循本教程: 但是我不理解这段代码,因为它有多个完成处理程序,我也不理解这段代码是如何工作的(我知道这是singleton类的一部分,但是这段代码在做什么,以及什么是“notes?”.notes?”: 我已经连续8天被困在这一点上了,所以请帮助我:(listNotes(:)有自己的完成块,名为completion 在listNotes(:)的完成体中,listNotes(:)对名为list(:,:)的客户端变量调用异步抛出函数 函数列表(:,:)有自己的完成块,并向其中传递两个变量:note

我遵循本教程:

但是我不理解这段代码,因为它有多个完成处理程序,我也不理解这段代码是如何工作的(我知道这是singleton类的一部分,但是这段代码在做什么,以及什么是“notes?”.notes?”:

我已经连续8天被困在这一点上了,所以请帮助我:(

listNotes(:)有自己的完成块,名为completion

在listNotes(:)的完成体中,listNotes(:)对名为list(:,:)的客户端变量调用异步抛出函数

函数列表(:,:)有自己的完成块,并向其中传递两个变量:notes和result

当list(:,:)的完成块执行时,首先会创建一个GCD块,在主线程上执行listNotes(:)的完成

然后它将两个块变量从列表(:,:)的闭包向前传递到listNotes(:)的闭包中;可选变量notes上的一个属性也命名为notes(应该在imo中重构)和result

这里需要注意的一件非常重要的事情是,因为client.list(:,:)是一个抛出函数,并且永远不会捕获错误,如果该函数确实抛出,则listNotes(:)永远不会执行它的完成块。我通常认为这是非常糟糕的实践,因为有人可以依赖于该函数来执行它的闭包而不管成功。你基本上是在破坏你在函数签名中做出的承诺。

ListNoX(^:)有它自己的完成块名为完成。 在listNotes(:)的完成体中,listNotes(:)对名为list(:,:)的客户端变量调用异步抛出函数

函数列表(:,:)有自己的完成块,并向其中传递两个变量:notes和result

当list(:,:)的完成块执行时,首先会创建一个GCD块,在主线程上执行listNotes(:)的完成

然后它将两个块变量从列表(:,:)的闭包向前传递到listNotes(:)的闭包中;可选变量notes上的一个属性也命名为notes(应该在imo中重构)和result


这里需要注意的一件非常重要的事情是,因为client.list(:,:)是一个抛出函数,并且永远不会捕获错误,如果该函数确实抛出,则listNotes(:)永远不会执行它的完成块。我通常认为这是一个非常糟糕的实践,因为有人可以依赖这个函数来执行它的关闭,不管它是否成功。你本质上是在破坏你在函数签名中做出的承诺。

最后一段很重要。我总是确保完成。不管发生什么,处理程序都会被调用。其他任何事情都会导致灾难。最后一段非常重要。我始终确保无论发生什么,都会调用完成处理程序。其他任何事情都会导致灾难。
func listNotes(completion: @escaping([Note]?, CallResult?) -> Void) {
    _ = try? client.list(Empty(), completion: { (notes, result) in
        DispatchQueue.main.async {
            completion(notes?.notes, result)
        }
    })
}