7 votes

Le paramètre générique "Valeur" n'a pas pu être déduit lors de la création d'un OVK basé sur un bloc dans swift.

La saisie de cette ( exemple artificiel ) code

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

}

dans un terrain de jeu Xcode 9, entraîne cette erreur pour l'appel à subject.observe :

Le paramètre générique "Valeur" n'a pas pu être déduit

La cause de l'erreur n'est pas claire. Que peut-on faire pour résoudre ce type de problème ?

6voto

moglistree Points 41

La ligne suivante :

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

doit être remplacé par :

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

})

Vous ne pouvez pas essayer d'observer le sujet depuis qu'il est abattu à un NSObject qui n'a pas la propriété amount . Et deuxièmement \ValueProviderProtocol.amount est un chemin de clé partiel qui n'infère pas de type de valeur \.amount est un KeyPath qui déduit keypath

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X