SwiftTask 是 Promise + progress + pause + cancel,使用 SwiftState (状态机)。
例子:
//定义任务
let task = Task < Float,String,NSError > {进展,实现,拒绝,在
播放器。doSomethingWithProgress({(progressValue:浮动)在
进展(progressValue)//可选
},完成:{(价值:NSData的?,错误:NSError ?)中
,如果错误== 零 {
履行(“ OK ”)
}
其他 {
拒绝(错误)
}
})
//暂停/恢复/取消配置(可选)
配置。暂停 = {[ 弱玩家] 在
播放器?。暂停()
}
配置。简历 = {[ 弱玩家] 在
播放器?。简历()
}
配置。取消 = {[ 弱玩家] 在
播放器?。取消()
}
}
//设置成功与失败
任务。success {(value:String)-> Void in
//做一些有价值的事情
}。失败 {(错误:NSError ?,isCancelled:布尔)- > 虚空 中
//做拒绝错误的东西
}
//您可以在任务定义之外调用已配置的操作
任务。暂停()
任务。简历()
任务。取消()
请注意,它player
具有以下方法,可以很好地与配合使用SwiftTask
:
doSomethingWithProgress(_:completion:)
(进度回调为可选)pause()
(可选的)resume()
(可选的)cancel()
(可选的)最好的例子之一是Alamofire(网络库),如下所示。
typealias 进度 =(bytesWritten:Int64,totalBytesWritten:Int64,totalBytesExpectedToWrite:Int64)
typealias AlamoFireTask = Task <Progress,String,NSError>
//定义任务
let task = AlamoFireTask {进展,完成,拒绝,在
Alamofire。下载(.GET,“ http://httpbin.org/stream/100 ”,目标位置:某处)
。进步 {bytesWritten,totalBytesWritten,totalBytesExpectedToWrite 在
进度((作为进度的(bytesWritten,totalBytesWritten,totalBytesExpectedToWrite))
}。响应 {请求,响应数据,误差在
如果 让错误=错误{
拒绝(错误)
返回
}
完成(“确定”)
}
返回
}
//设置进度,然后
任务。progress {(oldProgress:Progress ?,newProgress:Progress)在
的println(“ \(newProgress。bytesWritten ) ”)
的println(“ \(newProgress。totalBytesWritten ) ”)
的println(“ \(newProgress。totalBytesExpectedToWrite ) ”)
}。然后 {(价值:字符串?,errorInfo中:AlamoFireTask ERRORINFO ?)- > 虚空 中
//确实与实现价值的东西或者拒绝errorInfo中
}