PromiseKit 4.3迁移至6版本遇类型转换错误求助
PromiseKit 4.3 → 6.x 迁移:解决类型转换错误问题
这个问题我太熟悉了!从PromiseKit 4.x升级到6.x时,很多开发者都会踩这个then和map的职责划分坑,咱们一步步来解决它。
错误原因分析
在PromiseKit 4.3版本里,then方法比较“全能”——既支持直接返回普通值(框架会自动帮你包装成Promise),也支持返回另一个Promise。但到了6.x版本,官方对链式方法做了更清晰的职责拆分:
map: 专门用于同步转换结果,闭包直接返回目标类型的值,框架自动包装为Promise<T>then: 专门用于异步链式调用,闭包必须返回一个Promise<T>类型
你的代码是同步处理GetSettingsQuery的结果,直接返回Environment值,这时候用then就会触发类型不匹配报错——编译器期望闭包返回Promise类型,但你返回了原始值。
修复后的代码
把then替换成map就能解决问题:
open func run() -> Promise<Environment> { return GetSettingsQuery().run().map { result -> Environment in var environment = Environment.certification if let dict = result.data as? Dictionary<String, AnyObject>, let environementRaw = dict["ABC"] as? Int, let env = Environment(rawValue: environementRaw) { environment = env } return environment } }
额外提示
如果你的后续操作是异步的(比如需要再发起一个网络请求并返回Promise),那依然要用then,举个例子:
// 异步场景用then,闭包必须返回Promise类型 somePromise.then { result -> Promise<AnotherType> in return AnotherAsyncQuery().run() }
内容的提问来源于stack exchange,提问作者satish
相关产品推荐
相关产品推荐

