Je travaille sur le mélange et la correspondance du code source iOS. J'ai implémenté codable pour Swift qui réduit la charge de l'écriture de la logique de l'analyseur. J'ai essayé de conformer ma classe Objective C à un protocole codable qui, à son tour, a généré une erreur "Impossible de trouver la déclaration de protocole pour 'Codable' ". Existe-t-il un moyen d'utiliser ce protocole Swift dans la classe Objective C? Ou existe-t-il d'autres API Objective C qui offrent les mêmes capacités que Codable? L'idée est de logique d'analyse identique sur toutes les classes Swift et Objective C.
Oui, vous pouvez utiliser Codable avec Obj-C. La partie délicate est que, comme Obj-C ne peut pas voir Decoder
, vous devrez donc créer une méthode de classe d'assistance lorsque vous aurez besoin qu'elle soit allouée du côté Obj-C.
public class MyCodableItem: NSObject, Codable {
private let id: String
private let label: String?
enum CodingKeys: String, CodingKey {
case id
case label
}
@objc public class func create(from url: URL) -> MyCodableItem {
let decoder = JSONDecoder()
let item = try! decoder.decode(MyCodableItem.self, from: try! Data(contentsOf: url))
return item
}
public required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(String.self, forKey: .id)
label = try? container.decode(String.self, forKey: .label)
super.init()
}
required init(coder decoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}