无法在 ios swift promisekit 上使用
Posted
技术标签:
【中文标题】无法在 ios swift promisekit 上使用【英文标题】:Unable to use then on ios swift promisekit 【发布时间】:2018-04-24 11:19:51 【问题描述】:我创建了一个 Promise,它从 API 获取一些数据并返回它。现在我遇到的问题是在获取我需要将它们存储在设备存储(领域)上的 json 数据之后。在我尝试调用 promise 之后,我得到一些错误,说明 Cannot convert value of type '(Any) -> Void' to expected argument type '(_) -> _' 。但是当我尝试完成它时,它工作得很好。但我需要使用 then 将数据保存在领域。
以下方法可以正常工作
Translator().translators().done data -> Void in
print(data[0].name)
.catch error in
print(error)
但是以下两种方法都失败了
Translator().translators().then() data -> Void in
print(data)
.catch()
(e: Error) in
print(e)
上面给出了一个错误提示
Cannot convert value of type '(Any) -> Void' to expected argument type '(_) -> _'
以下方法给出了另一个类似的错误
Translator().translators().then()
(data: [Translator]) -> Void in
print(data[0].name)
.catch()
(e: Error) in
print(e)
错误信息:
Cannot convert value of type '([Translator]) -> Void' to expected argument type '([Translator]) -> _'
我创造的承诺:
func translators() -> Promise<[Translator]>
return firstly
Alamofire.request("http://192.168.0.107:3000/translatdors", method: .get).responseData()
.map
try JSONDecoder().decode([Translator].self, from: $0.data)
我的代码和错误的图像
【问题讨论】:
【参考方案1】:当您执行.then
时,您必须返回promise
,因为直到.done
您还没有完成。我没有看到在.done
中保存领域数据有任何问题,因为您的方法没有返回类型。
如果你还想使用.then
,可以这样做。
Translator().translators().then( data -> Promise<[Translator]> in
return Promise.value(data)
).done( data in
// Save to realm
).catch( error in
print(error.localizedDescription)
)
【讨论】:
我实际上是在玩 promisekit。现在我明白了这个问题。被错误信息误导了。谢谢兄弟。以上是关于无法在 ios swift promisekit 上使用的主要内容,如果未能解决你的问题,请参考以下文章
Linux swift 项目中的 PromiseKit 无法按预期工作
使用 PromiseKit 6 在 Swift 4.2 中缓存
PromiseKit 6 在没有上下文类型的情况下无法解析对成员“值”的引用