Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios &引用;通用参数';价值';“无法推断”;为了“遵守”`_Ios_Swift_Generics_Key Value Observing - Fatal编程技术网

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's
model
?@matt添加了代码以再现您引用的错误,它的出现与您是否调用
row.bind(to:\ExampleClass.category)
无关。这是一个关于
bind
本身是如何定义的事实。你认为它有什么可以解析值呢?是的。“值”是否应按传递的参数类型进行解析,与从传递的参数解析“T”的方式相同:所讨论的值不是您所写的值。你可以用V替换它,你会得到同样的错误。这里不知道的是
observe
调用的值。请提供足够的代码让我们重现。例如,what's
model
?@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 }