2
votes

En conflit avec la propriété parent "description" dans Swift

J'utilise EVNetworkningObject de la bibliothèque EVReflection pour sérialiser ou désérialiser la réponse Json du service Web. Cela signifie que je ne peux pas changer le nom de la propriété "description" en "description_" ou quelque chose comme ça. Dans le même temps, le backend ne changera pas sa propriété de réponse pour moi. Comment puis-je corriger cette erreur?

 entrez la description de l'image ici

Le message d'erreur dit

Récupère la 'description' avec le sélecteur Objective-C 'description' conflit avec getter pour 'description' de la superclasse 'NSObject' avec le même sélecteur Objective-C


4 commentaires

Utilisez une structure ou utilisez Codable . Si EVReflection n'est pas capable de mapper les noms de propriétés, il n'est de toute façon pas qualifié.


@vadian, comment? Je suis nouveau sur iOS.


de plus, il ne s'agit pas d'un problème de réflexion EV. C'est le problème de NSObject.


Toutes les bibliothèques tierces pour (dé) sérialiser JSON sont devenues obsolètes au profit de Codable dans Swift 4+


4 Réponses :


4
votes

description est une propriété du protocole nommé NSObjectProtocol de NSObject.

public var description: String { get }

Ainsi vous pouvez n'initiez aucune variable portant le même nom dans les sous-classes NSObject .

Pour en savoir plus, visitez https://developer.apple.com/documentation/objectivec/nsobjectprotocol/1418746-description .

Veuillez essayer soit en lançant la variable avec des noms différents , soit en implémentant avec le protocole Codable ce que @vadian a suggéré dans les commentaires. p >


0 commentaires

0
votes

La solution de contournement de loin la plus simple consiste à renommer la propriété. Ex: var annonceDescription: String?


0 commentaires

0
votes

Je suppose que vous utilisez JSON décodable pour obtenir des données JSON. si c'est le cas, vous n'avez pas besoin de rendre votre super classe de type NSObject . La raison pour laquelle vous obtenez cette erreur est que le nom est en conflit avec le getter pour «description» de la superclasse «NSObject». Donc, faites de l'objet EVNetworking (qui est votre super classe) une classe qui se conforme uniquement au protocole décodable et non à une classe de type NSObject.


0 commentaires

0
votes

Comme Vadian l'a suggéré dans les commentaires, j'ai décidé d'utiliser le protocole Codable au lieu de EVReflection car Codable est très facile à utiliser. J'ai lu ce lien pour Codable et ce lien vidéo pour analyser les données json.


0 commentaires