首页 > 解决方案 > 在完成块中快速传递结构

问题描述

我是 swift 新手,我有

struct User{...}

试图从网络调用完成块返回此用户

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

在我的视图控制器中

    api.prof { user in
    // user nil
    }

请澄清如何正确返回用户?

标签: swiftnetworkingstruct

解决方案


首先,一个友好的建议是停止这种混乱的闭包。使用类型别名来避免函数声明的复杂性。

typealias UserCompletion = (User?) -> Void

现在在您的功能中:

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

视图控制器:

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

}

其次,为什么您希望您的完成与可选用户一起完成?理想情况下,如果用户创建失败,您会想要出错。你可以用Result<User, Error>那个。


推荐阅读