Ios &引用;通用参数';价值';“无法推断”;为了“遵守”`
我有一个类是泛型的,比如:Ios &引用;通用参数';价值';“无法推断”;为了“遵守”`,ios,swift,generics,key-value-observing,Ios,Swift,Generics,Key Value Observing,我有一个类是泛型的,比如: class Row<T> { ... } 然后在bind中,我想开始观察类中我的ExampleClass实例的ExampleClass.category 我实施了: func bind<Value>(to targetKeyPath: ReferenceWritableKeyPath<T, Value>) { if let model = model as? NSObject { model.o
class Row<T> {
...
}
然后在bind
中,我想开始观察类中我的ExampleClass
实例的ExampleClass.category
我实施了:
func bind<Value>(to targetKeyPath: ReferenceWritableKeyPath<T, Value>) {
if let model = model as? NSObject {
model.observe(targetKeyPath, options: [.new ,.old], changeHandler: { _, change in
Log.info?.msg("Now we have some stuff: \(change)")
})
}
}
我想如何使用上面的示例类:
class Person: NSObject {
@objc var age: NSNumber?
}
class Book: NSObject {
@objc var title: String?
}
let row1 = Row(model: Person())
let row2 = Row(model: Book())
row1.bind(to: \Person.age)
row2.bind(to: \Book.title)
你可能想得太多了。问题在于,
模型
已知仅为NSObject。您可以像这样简单地复制:
class ExampleClass:NSObject {
@objc dynamic var category = ""
}
let model = NSObject()
model.observe(\ExampleClass.category) { _,_ in }
同样的错误。如果您将
模型
更改为ExampleClass,问题就会消失。您可能考虑过了。问题在于,模型
已知仅为NSObject。您可以像这样简单地复制:
class ExampleClass:NSObject {
@objc dynamic var category = ""
}
let model = NSObject()
model.observe(\ExampleClass.category) { _,_ in }
同样的错误。如果您将
模型
更改为ExampleClass,问题就会消失。请提供足够的代码,以便我们复制。例如,what'smodel
?@matt添加了代码以再现您引用的错误,它的出现与您是否调用row.bind(to:\ExampleClass.category)
无关。这是一个关于bind
本身是如何定义的事实。你认为它有什么可以解析值呢?是的。“值”是否应按传递的参数类型进行解析,与从传递的参数解析“T”的方式相同:所讨论的值不是您所写的值。你可以用V替换它,你会得到同样的错误。这里不知道的是observe
调用的值。请提供足够的代码让我们重现。例如,what'smodel
?@matt添加了代码以再现您引用的错误,它的出现与您是否调用row.bind(to:\ExampleClass.category)
无关。这是一个关于bind
本身是如何定义的事实。你认为它有什么可以解析值呢?是的。“值”是否应按传递的参数类型进行解析,与从传递的参数解析“T”的方式相同:所讨论的值不是您所写的值。你可以用V替换它,你会得到同样的错误。这里不知道的是observe
调用的值。我知道这不是您所希望的。我只是想解释一下错误信息。好吧,你想做的事情听起来像是我提交此错误报告时想做但做不到的事情:可能是这样,但我看不出有多少反应。。对话集中在从泛型/到泛型的转换上。的确,我不小心导致对话偏离了原始报告,但原始报告仍然是一个报告错误。如果您想继续使用您的用例,或者提交您自己的bug报告,请这样做。我知道这不是您所希望的。我只是想解释一下错误信息。好吧,你想做的事情听起来像是我提交此错误报告时想做但做不到的事情:可能是这样,但我看不出有多少反应。。对话集中在从泛型/到泛型的转换上。的确,我不小心导致对话偏离了原始报告,但原始报告仍然是一个报告错误。如果您想继续使用您的用例,或者提交您自己的bug报告,请这样做。
class ExampleClass:NSObject {
@objc dynamic var category = ""
}
let model = NSObject()
model.observe(\ExampleClass.category) { _,_ in }