listNotes (_ :) имеет свой собственный блок завершения с именем Завершение.
В теле завершения listNotes (_ :), listNotes (_ :) вызывает асинхронную вызывающую функцию для клиентской переменной с именем list (_ :, _ :).
Список функций (_ :, _ :) имеет свой собственный блок завершения и передает в него две переменные;заметки и результат.
Когда выполняется блок завершения списка (_ :, _ :), первое, что происходит, - это создание блока GCD для выполнения завершения списка ListNotes (_ :) в главном потоке.
Затем он передает две блочные переменные из замыкания списка (_ :, _ :) вперед в замыкание listNotes (_ :);свойство в необязательной переменной notes, также называемое notes (должно быть изменено imo) и result.
Одна очень важная вещь, которую следует здесь отметить, состоит в том, что, поскольку client.list (_ :, _ :) является функцией выброса, и ошибка никогда не обнаруживается, если эта функция бросает, listNotes (_ :) никогда не будетвыполнить блок завершения.Я вообще считаю, что это очень плохая практика, поскольку кто-то может зависеть от этой функции, чтобы выполнить ее закрытие независимо от успеха.По сути, вы настраиваете себя на нарушение обещания, которое вы дали в сигнатуре функции.