Ich habe eine Klasse, die generisch ist, wie:„Generic Parameter‚Wert‘nicht geschlossen werden konnte“ für `observe`
class Row<T> {
...
}
Wenn ich eine Instanz von , wo T
ExampleClass
ist, möchte ich in der Lage zu tun:
row.bind(to: \ExampleClass.category)
Dann in bind
ich ExampleClass.category
für meine ExampleClass
Instanz gestartet werden soll beobachten, dass ich in der Klasse haben.
Ich habe implementiert:
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)")
})
}
}
Das gibt mir den Fehler: Generic parameter 'Value' could not be inferred
.
Wie ist das möglich? Die T
ist gelöst, aber warum kann nicht Value
abgeleitet werden? Es sollte von dem Parameter targetKeyPath
stammen.
Voll Code für repoducable:
class Row<T> {
let model: T
init(model: T) {
self.model = model
}
func bind<Value>(to targetKeyPath: ReferenceWritableKeyPath<T, Value>) {
if let model = model as? NSObject {
model.observe(targetKeyPath, options: [], changeHandler: { _, _ in
})
}
}
}
Wie ich möchte das Beispiel-Klasse verwenden oben:
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)
Bitte geben Sie genügend Code, um uns zu reproduzieren. Zum Beispiel, was ist 'Modell'? – matt
@matt Code hinzugefügt, um zu reproduzieren – netigger
Der Fehler, den Sie angeben, erscheint _without_ Verweis darauf, ob Sie 'row.bind (to: \ ExampleClass.category)' aufrufen oder nicht. Es ist eine Tatsache, wie 'bind' selbst definiert ist. Was ist daran dran, dass du denkst, dass "Wert" verrechnet wird? – matt