gpt4 book ai didi

swift - 无法推断通用参数 'Value' 在 swift 中创建基于 block 的 KVO

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:36 25 4
gpt4 key购买 nike

输入这个(人为的例子)代码

import Foundation

protocol ValueProviderProtocol {
var amount: Int { get }
}

class ValueProvider: NSObject, ValueProviderProtocol {
@objc dynamic var amount = 0
}

let _provider = ValueProvider()

var provider: ValueProviderProtocol { return _provider }

let subject = provider as! NSObject

let observer = subject.observe(\ValueProviderProtocol.amount, options: [.old, .new]) { (provider, changes) in

}

进入 Xcode 9 playground,调用 subject.observe 时出现此错误:

Generic parameter 'Value' could not be inferred

目前还不清楚是什么导致了错误。如何解决此类问题?

最佳答案

下面一行:

let observer = subject.observe(\ValueProviderProtocol.amount, 
options: [.old, .new])
{ (provider, changes) in
}

需要更改为:

let observer = _provider.observe(\.amount,
options: [.old, .new],
changeHandler: { (provider, changes) in

})

您不能尝试观察主题,因为它被向下转换为不具有属性 amountNSObject。第二个 \ValueProviderProtocol.amount 是不推断值类型的部分键路径 \.amount 是推断键路径的 KeyPath

关于swift - 无法推断通用参数 'Value' 在 swift 中创建基于 block 的 KVO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47087353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com