Ios 显示来自非UI类的警报
我正在应用程序中使用Alamofire,如果请求有错误(例如错误的URL),我希望显示一个警报 我在一个单独的类中有这个函数,因为它在应用程序的页面之间共享Ios 显示来自非UI类的警报,ios,swift,uialertview,alamofire,Ios,Swift,Uialertview,Alamofire,我正在应用程序中使用Alamofire,如果请求有错误(例如错误的URL),我希望显示一个警报 我在一个单独的类中有这个函数,因为它在应用程序的页面之间共享 Alamofire.request(.GET, api_url) .authenticate(user: str_api_username, password: str_api_password) .validate(statusCode: 200..<300) .respons
Alamofire.request(.GET, api_url)
.authenticate(user: str_api_username, password: str_api_password)
.validate(statusCode: 200..<300)
.response { (request, response, data, error) in
if (error != nil) {
let alertController = UIAlertController(title: "Server Alert", message: "Could not connect to API!", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertController, animated: true, completion: nil)
}
}
不起作用,如何显示此警报?我想说,传统的方法是让调用此网络请求的人负责显示警报。如果请求完成后,您回调原始调用对象,则它们负责显示警报。其中一个原因是错误在不同的上下文中可能意味着不同的事情。您可能并不总是希望显示警报-这为您构建应用程序提供了更大的灵活性。与AlamoFire在完成时调用响应闭包的方式相同,我认为最好将其传递给在
下载程序中发起此调用的人
更新:
您希望以AlamoFire构建它的方式来构建它。您将闭包传递给AF,AF请求完成时将调用该闭包
您必须在下载函数中添加一个闭包参数(请参见downloadMyStuff
)。然后,一旦AF请求完成,就可以调用之前定义的闭包(completion
)。这里有一个简单的例子
class Downloader {
func downloadMyStuff(completion: (AnyObject?, NSError?) -> Void) {
Alamofire.request(.GET, "http://myapi.com")
.authenticate(user: "johndoe", password: "password")
.validate(statusCode: 200..<300)
.response { (request, response, data, error) in
completion(data, error)
}
}
}
class ViewController: UIViewController {
let downloader = Downloader()
override func viewDidLoad() {
super.viewDidLoad()
self.downloader.downloadMyStuff { (maybeResult, maybeError) -> Void in
if let error = maybeError {
println("Show your alert here from error \(error)")
}
if let result: AnyObject = maybeResult {
println("Parse your result and do something cool")
}
}
}
}
类下载程序{
func下载mystuff(完成:(AnyObject?、NSError?->Void){
请求(.GET,“http://myapi.com")
.验证(用户:“johndoe”,密码:“password”)
.验证(状态代码:200..Void in
如果let error=maybeError{
println(“在此处显示来自错误\(error)”的警报)
}
如果let result:AnyObject=maybresult{
println(“解析结果并做一些很酷的事情”)
}
}
}
}
谢谢你的回复John!但是我怎么做…?由于Alamofire请求是异步运行的,如果我试图将错误发送回类,我会调用该函数,直到它完全完成,我什么都没有得到,所以对我和我的SWIFT知识来说,这有点棘手…你能让它工作吗?我也有同样的问题问题…您如何处理应用程序的错误?
class Downloader {
func downloadMyStuff(completion: (AnyObject?, NSError?) -> Void) {
Alamofire.request(.GET, "http://myapi.com")
.authenticate(user: "johndoe", password: "password")
.validate(statusCode: 200..<300)
.response { (request, response, data, error) in
completion(data, error)
}
}
}
class ViewController: UIViewController {
let downloader = Downloader()
override func viewDidLoad() {
super.viewDidLoad()
self.downloader.downloadMyStuff { (maybeResult, maybeError) -> Void in
if let error = maybeError {
println("Show your alert here from error \(error)")
}
if let result: AnyObject = maybeResult {
println("Parse your result and do something cool")
}
}
}
}