从服务器获取数据时如何使用 typealias
Posted
技术标签:
【中文标题】从服务器获取数据时如何使用 typealias【英文标题】:How to use typealias when getting data from server 【发布时间】:2017-01-12 13:45:44 【问题描述】:我正在尝试从服务器获取用户数据。在加载数据之前,应用程序不必显示任何视图。 我读过关于 typealias 的文章,但我不明白如何使用它。
我想要什么:加载数据后,继续下一步。如果失败,请重新加载数据。
这是我声明类型别名的方式
typealias onCompleted = () -> ()
typealias onFailed = () -> ()
这是我的请求代码
func getUserData(_ completed: @escaping onCompleted, failed: @escaping onFailed)
let fullURL = AFUtils.getFullURL(AUTHURL.getUserData)
AFNetworking.requestGETURL(fullURL, params: nil, success:
(JSONResponse) -> Void in
if let status = JSONResponse["status"].string
switch status
case Status.ok:
completed()
break
default:
failed()
break
)
但是当调用 getUserData 时,我怎么能在我的视图控制器上使用它呢?
【问题讨论】:
您为什么将AFNetworking
与Swift
一起使用?有Alamofire
,来自同一个开发者的框架,做同样的事情,只写在Swift
。
如果这是真正的代码结构,我将返回 JSONResponse
而不是两个单独的对象,并在调用方法中执行 switch
。如果它只是一个true
/ false
问题,我会返回一个(Bool) -> ()
不要专注于 AFNetworking,AF 是我的项目缩写我正在使用 Alamofire 和 SwiftyJSON
附带说明,我建议将您的类型别名大写为OnCompleted
和OnFailure
(或者,可能更好的是CompletedBlock
和FailureBlock
)。顾名思义,Typealiases 表示类型,而类型使用大写的名称。
什么没有按预期工作?
【参考方案1】:
假设您的自定义 AFNetworking.requestGETURL
s 完成处理程序在主队列上被调用:
func viewDidLoad()
super.viewDidLoad()
getUserData(
//do somthing and update ui
)
//handle error
编辑:
我如何理解您的评论,您实际上想命名您的完成和错误块参数。如果是这样,请将方法更改为:
func getUserData(completion completed: @escaping onCompleted, error failed: @escaping onFailed) ...
然后这样称呼它:
getUserData(completion:
//do somthing and update ui
, error:
//handle error
)
【讨论】:
调用这个很好,但是调用错误完成块时怎么调用getUserDate以上是关于从服务器获取数据时如何使用 typealias的主要内容,如果未能解决你的问题,请参考以下文章