从服务器获取数据时如何使用 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 时,我怎么能在我的视图控制器上使用它呢?

【问题讨论】:

您为什么将AFNetworkingSwift 一起使用?有Alamofire,来自同一个开发者的框架,做同样的事情,只写在Swift 如果这是真正的代码结构,我将返回 JSONResponse 而不是两个单独的对象,并在调用方法中执行 switch。如果它只是一个true / false 问题,我会返回一个(Bool) -> () 不要专注于 AFNetworking,AF 是我的项目缩写我正在使用 Alamofire 和 SwiftyJSON 附带说明,我建议将您的类型别名大写为OnCompletedOnFailure(或者,可能更好的是CompletedBlockFailureBlock)。顾名思义,Typealiases 表示类型,而类型使用大写的名称。 什么没有按预期工作? 【参考方案1】:

假设您的自定义 AFNetworking.requestGETURLs 完成处理程序在主队列上被调用:

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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用标头从服务器 Alamofire swift 获取数据

如何使用 SearchBar 从服务器获取数据

如何从 ngOnInit Angular 中的服务获取数据

使用 typealias 从回调转移到委托

如何从 SESSID 获取 $_SESSION 数据?

如何在 vue js 中从服务器获取数据?