Swift 链接前可选择打开PromiseKit包装
刚刚开始使用PromiseKit 6和Swift。我检查了一些示例并阅读了文档。我有一个看似琐碎的场景,但我无法回避。我有以下情况:Swift 链接前可选择打开PromiseKit包装,swift,promisekit,Swift,Promisekit,刚刚开始使用PromiseKit 6和Swift。我检查了一些示例并阅读了文档。我有一个看似琐碎的场景,但我无法回避。我有以下情况: func addModel(_ model: Model, image: UIImage?, completion: @escaping (Error?) -> Void) { var modelToSet = model var id = "" firstly { serviceWrapper.setImage(imag
func addModel(_ model: Model, image: UIImage?, completion: @escaping (Error?) -> Void) {
var modelToSet = model
var id = ""
firstly {
serviceWrapper.setImage(image!)
}.map { path in
modelToSet.imagePath = path
}.then { [serviceWrapper]
serviceWrapper.setModel(modelToSet)
}.map { documentId in
id = documentId
}.then {
CLLocationManager.promise()
}.done { [serviceWrapper] location in
serviceWrapper.setLocation(GeoPoint(latitude: location.lat, longitude: location.long), id: id)
}.catch { error in
completion(error)
}
}
如您所见,在这个伪代码中,我强制展开图像。如果有图像通过,我可以用setImage方法启动链吗?否则直接从setModel开始。或者如果没有图像,可能只返回空字符串?我错过了什么
你知道如何使用setImage方法启动链吗
有图像传递吗
您可以使用保护语句检查图像是否为零。如果为nil,则执行返回所需的代码。如果没有,则使用扭曲的图像继续流动
func addModel(_ model: Model, image: UIImage?, completion: @escaping (Error?) -> Void) {
var modelToSet = model
var id = ""
guard let image = image else {
// insert code to return if needed
return
}
firstly {
serviceWrapper.setImage(image)
}.map { path in
modelToSet.imagePath = path
}.then { [serviceWrapper]
serviceWrapper.setModel(modelToSet)
}.map { documentId in
id = documentId
}.then {
CLLocationManager.promise()
}.done { [serviceWrapper] location in
serviceWrapper.setLocation(GeoPoint(latitude: location.lat, longitude: location.long), id: id)
}.catch { error in
completion(error)
}
}
在询问PromiseKit社区后,我得到了我需要的东西。这就是用局部函数求解的方法:
func addModel(_ model: Model, image: UIImage?, completion: @escaping (Error?) -> Void) {
var modelToSet = model
var id = ""
func start() -> Promise<Void> {
guard let image = image else {
return Promise()
}
return serviceWrapper.uploadImage(image).map { path in
dishToSet.imagePath = path
}
}
firstly {
start()
}.then { [serviceWrapper]
serviceWrapper.setModel(modelToSet)
}.map { documentId in
id = documentId
}.then {
CLLocationManager.promise()
}.done { [serviceWrapper] location in
serviceWrapper.setLocation(GeoPoint(latitude: location.lat, longitude: location.long), id: id)
}.catch { error in
completion(error)
}
}
func addModel(umodel:model,image:UIImage?,完成:@escaping(Error?)->Void){
var modelToSet=模型
var id=“”
func start()->Promise{
guard let image=image else{
回报承诺()
}
返回serviceWrapper.uploadImage(image).map{path in
dishToSet.imagePath=路径
}
}
首先{
开始()
}.然后{[serviceWrapper]
serviceWrapper.setModel(modelToSet)
}.map{documentId在中
id=documentId
}.那么{
CLLocationManager.promise()
}.done{[serviceWrapper]在中的位置
setLocation(地理点(纬度:location.lat,经度:location.long),id:id)
}.catch{中的错误
完成(错误)
}
}
嘿,谢谢你的回答。你误解了我的意思,如果没有形象,我不希望整个链条都失败。如果没有图像,我想跳过第一个操作符。如果不可能,只需向前传递一个空字符串。这行得通吗?这行得通,但是如果你想处理.catch中为零的图像呢?