Codable classe n'est pas conforme au protocole Décodable
Pourquoi suis-je un "Type" Signet "n'est pas conforme à un protocole de Décodable'" message d'erreur?
class Bookmark: Codable {
weak var publication: Publication?
var indexPath: [Int]
var locationInText = 0
enum CodingKeys: String, CodingKey {
case indexPath
case locationInText
}
init(publication: Publication?, indexPath: [Int]) {
self.publication = publication
self.indexPath = indexPath
}
}
Je ne souhaite pas enregistrer la publication var depuis la Publication détient le Signet mais le signet a besoin de savoir qui de la Publication à laquelle il appartient. Le décoder init de Publication définir le signet référence à lui-même.
Ne peut pas reproduire dans Swift 4.0.3 (Xcode 9.2) – s'il vous plaît pourriez-vous fournir un un Minimum, Complètes et Vérifiables exemple?
Il serait bon de savoir pourquoi ma question était downvoted pour que je puisse apprendre quelque chose pour l'avenir
Pas un des downvoters, mais votre question serait beaucoup plus utile avec un exemple afin que d'autres personnes peuvent facilement reproduire votre problème (je n'arrive pas à le reproduire).
Il serait bon de savoir pourquoi ma question était downvoted pour que je puisse apprendre quelque chose pour l'avenir
Pas un des downvoters, mais votre question serait beaucoup plus utile avec un exemple afin que d'autres personnes peuvent facilement reproduire votre problème (je n'arrive pas à le reproduire).
OriginalL'auteur Melodius | 2018-02-01
Vous devez vous connecter pour publier un commentaire.
C'est soit parce que la Publication n'est pas Décodable (vous n'avez pas montré ce qu'il est, il est donc difficile de le dire) ou en raison de la
weak
, la désignation d'unpublication
.Toute façon, c'est facile à corriger: vous avez juste besoin de mettre en œuvre
init(from:)
pour compléter la mise en œuvre de Décodable; le compilateur est tout simplement vous dire que cette mise en œuvre ne peuvent pas être synthétisés.Fonctionne maintenant, merci! Encodable n'a pas à se plaindre. Juste curieux de savoir pourquoi le compilateur est parfaitement heureux, si je retire CodingKeys tout à fait quand je n'ai pas encore mis en œuvre init(de:)?
La Publication n'avait rien à voir avec le problème cette fois.
OriginalL'auteur matt
Le compilateur ne peut pas le synthétiser le nécessaire
init(from:)
méthode en raison de laweak
de référence, de sorte que vous besoin de l'écrire vous-même.Content d'avoir pu aider. C'est à vous, quelle réponse vous accepter, mais si vous avez trouvé à la fois utile, vous pouvez toujours upvote les deux indépendamment du fait que l'on ne vous accepte.
à vous de choisir la réponse qui vous convient le mieux et serait de fournir la plupart des informations à d'autres personnes avec la même question
J'ai trouvé David réponse plus utile, car il contient des exemples de code.
OriginalL'auteur Dávid Pásztor
Sur le recul, j'ai reçu une semblable erreur lorsque vous tentez de définir
Codable
de ma classe, qui se composait de NSNumber les variables de type. Voir l'image ci-dessous:Changer
NSNumber
de type de données primitifInt
résolu le problème. Voir ci-dessous:Je suppose que ce pourrait être vrai pour d'autres types de données qui nécessitent l'intégration d'Swift Standard de la Bibliothèque de Types de Valeur tels que NSString, NSArray et ainsi de suite
Haha. Vous êtes les Bienvenus. Comme toujours heureux de vous aider 🙂
OriginalL'auteur iOSer
Une autre raison pour laquelle vous pouvez obtenir ce message est si votre CodingKeys enum n'est pas exhaustive. Si vous disposez de trois propriétés dans le type de données, puis votre CodingKeys enum doit avoir trois propriété/nom.
OriginalL'auteur mikepj
insort, Tandis que la mise en œuvre de Codable, toutes les propriétés qui sont aucun type de données primitif (moyenne de classe de type ou peut-elle peut être objective-c classe) doit être Codable.
dans ce cas, la publication est de type classe, pour Publication doivent avoir mis en œuvre Codable
OriginalL'auteur kalpesh jetani
J'ai eu un problème similaire qui je suis tombé sur ce correctif. Comme je suis nouvelle Swift, je ne sais pas pourquoi ça marche! Si quelqu'un sait j'aimerais le savoir.
J'ai changé cela:
:
OriginalL'auteur ThunderGrad