5 votes

Gérer l'exception non capturée valueForUndefinedKey dans Swift

Je dispose d'une classe de bibliothèque tierce dont les sources ne me sont pas accessibles. Voici un exemple :

class MyClass: NSObject {
    let myProperty = 10
} 

Je peux obtenir myProperty comme ceci.

let test = MyClass().value(forKey: "myProperty")  // 10

Je souhaite vérifier si myProperty existe dans MyClass . La raison est que je ne veux pas que mon application se plante si l'implémentation de la classe tierce change à l'avenir.

Pour les tests, j'ai essayé

guard let test = MyClass().value(forKey: "myProperty1") else { return }  // crash

if let test = MyClass().value(forKey: "myProperty1") { }  // crash

do {
    let test = try MyClass().value(forKey: "myProperty1")  // crash
} catch { }

Dans tous les domaines, je me fais écraser.

*** Terminer l'application en raison d'une exception non prise 'NSUnknownKeyException', raison : '[<__lldb_expr_80.MyClass 0x608000223a00>]. valueForUndefinedKey :]: cette classe n'est pas conforme au codage des valeurs de clé pour la clé myProperty1.'

1voto

Hamza Ansari Points 2502

Vous devez trouver une meilleure solution en parlant à lib dev

Vous pouvez utiliser Mirror reflection et vérifier l'étiquette de ses objets

let myClass = Mirror(reflecting: MyClass())
for (_, attr) in myClass.children.enumerated() {
  if let propertyName = attr.label, propertyName == "myProperty"{
   print(propertyName, attr.value)
  }
}

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