swift - 在完成块中快速传递结构
问题描述
我是 swift 新手,我有
struct User{...}
试图从网络调用完成块返回此用户
func prof(completion: ((_ user: User?) -> ())? = nil) {
...
let user = ...//created successfully
completion?(user)
}
在我的视图控制器中
api.prof { user in
// user nil
}
请澄清如何正确返回用户?
解决方案
首先,一个友好的建议是停止这种混乱的闭包。使用类型别名来避免函数声明的复杂性。
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>
那个。
推荐阅读
- java - 取消计划的计时器任务并创建另一个计划
- java - 没有为 AuthenticationSuccessEvent 调用 Spring 安全 ApplicationListener
- javascript - 为什么调用 Function.apply.bind(fn, null) 调用 `fn.apply`,而不是 `Function.apply`?
- audio - 使用 sox 转换音频文件,同时保留日期/时间信息
- python - Python不会从命令行中提取多个参数
- xml - Blogger 中的面包屑
- python - Python GUI 示例的在线界面
- asp.net - 将来自网络抓取的响应保存为 csv 文件
- random - PostgreSQL获取两个时间戳之间的随机值,有小时限制
- xml - 复制具有属性但没有子元素的元素