Структура быстрого прохода в блоке завершения - PullRequest
0 голосов
/ 07 ноября 2019

Я новичок в swift, у меня есть

struct User{...}

, пытающийся вернуть этого пользователя из блока завершения сетевого вызова

func prof(completion: ((_ user: User?) -> ())? = nil) {
  ...
  let user = ...//created successfully
  completion?(user)
}

в моем контроллере представления

    api.prof { user in
    // user nil
    }

Уточните, пожалуйста, как правильно вернуть пользователя?

1 Ответ

0 голосов
/ 07 ноября 2019

Во-первых, дружеский совет прекратить этот беспорядок с замыканиями. Используйте псевдонимы типов, чтобы избежать сложности в объявлениях функций.

typealias UserCompletion = (User?) -> Void

Теперь в вашей функции:

func prof(completion: UserCompletion?) {
  ...
  completion?(user)
}

View Controller:

api.prof { user in 
   if let user = user {
      //do something with user
   }

}

Во-вторых, почему выхотите, чтобы ваше завершение было с необязательным пользователем? В идеале вы хотели бы пойти на ошибку, если создание пользователя не удается. Вы можете использовать Result<User, Error> для этого.

...