更新 PromiseKit 后出错:无法将“PMKFinalizer”类型的值转换为预期的参数类型“Promise<Void>”

Posted

技术标签:

【中文标题】更新 PromiseKit 后出错:无法将“PMKFinalizer”类型的值转换为预期的参数类型“Promise<Void>”【英文标题】:Error after update PromiseKit: Cannot convert value of type 'PMKFinalizer' to expected argument type 'Promise<Void>' 【发布时间】:2019-06-26 10:15:50 【问题描述】:

此代码适用于 PromiseKit v.4.5.2

func getReminderIds(idArray: [Int]) 

    var reminderPromises: [Promise<Void>] = []

    for id in idArray 
        if let prom = self.delegate?.getReminders(id).then( (reminderArray) -> Promise<Void> in
            Utils.logMessage("Reminders for asset \(id): \(reminderArray)")
            self.reminders[String(id)] = reminderArray
        ).catch( (err) in
            self.reminders[String(id)] = nil
            Utils.logMessage("Error getting reminders for asset \(id): \(err)")
        )

            reminderPromises.append(prom)
        

    

    _ = when(fulfilled: reminderPromises).done  results -> Void in
        self.collectionView?.refreshCollection(collection: 0)
    


但是在更新到 PromiseKit v.6.8.4 后我得到了错误 “无法将 'PMKFinalizer' 类型的值转换为预期的参数类型 'Promise'” 在这一行:

reminderPromises.append(prom)

【问题讨论】:

【参考方案1】:
struct Reminder 
    let id: Int
    let value: [String: Any]


func getReminderIds(idArray: [Int]) 

        var reminderPromises: [Promise<Reminder>] = []

        for id in idArray 
            reminderPromises.append(getReminders(id))
        

        _ = when(fulfilled: reminderPromises).done  results -> Void in
            for item in results 
                print(item.id)
                print(item.value)
            
        

    

    func getReminders(_ id: Int) -> Promise<Reminder> 
        // TODO network request or database request
        return Promise  $0.fulfill(Reminder(id: id, value: [:])) 
    

【讨论】:

是的,然后更改为完成并删除它 -> 承诺,完成块永远不会返回 现在我在这一行出现错误“无法将类型 '(_) -> Promise' 的值转换为预期的参数类型 '([Int]) -> Void'”:如果让prom = self.delegate?.getReminders(assetId: ID).done( (reminders) -> Promise in if let prom = self.delegate?.getReminders(assetId: ID).done( (reminders) in 你可以试试这个 现在我在此行中遇到与我的问题“无法将'PMKFinalizer'类型的值转换为预期的参数类型'Promise'”相同的错误提醒Promises.append(prom) :) 当我尝试设置提醒时,我收到错误“无法转换 'Promise 类型的值?”到预期的参数类型'[Int]?'”。因为提醒有 Promise?类型。我试过这个: func getReminders(_ id: Int) -> Promise // TODO 网络请求或数据库请求 let prompts = self.delegate?.getReminders(assetId: id) return Promise $0.fulfill(Reminder( id: id, value: 提醒 ?? []))

以上是关于更新 PromiseKit 后出错:无法将“PMKFinalizer”类型的值转换为预期的参数类型“Promise<Void>”的主要内容,如果未能解决你的问题,请参考以下文章

将 mac 更新到 12.0.1 monterey 后无法运行 virtualbox - 仅主机适配器出错

PromiseKit 6 在没有上下文类型的情况下无法解析对成员“值”的引用

PromiseKit 无法将类型 '[Result<TYPE>]' 的值分配给类型 '[TYPE]

更新核心数据模型后出错 - 无法识别的选择器发送到实例

更新后出错:无法解析模块“react/lib/ReactMount”

将 PromiseKit 转换为 Signal 和 SignalProducer