我正在混合和匹配iOS源代码。我已经实现了可编码的swift数据模型类,它减轻了编写解析器逻辑的负担。 我试图将我的目标 c 类与可编码的 protcol 保持一致,这反过来又抛出了一个错误"找不到'可编码'的协议声明"。有没有办法将这个 swift 协议用于目标 c 类?或者是否有任何其他目标 c API 提供与 Codable 相同的功能? 这个想法是使解析逻辑在 swift 和目标 c 类中相同。
是的,您可以将 Codable 与 Obj-C 一起使用。棘手的部分是,由于 Obj-C 看不到Decoder
,因此当您需要从 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")
}
}
class LoginDataModel: NSObject ,Codable {
@objc var stepCompleted: String?
@objc var userID: Int?
@objc var authkey: String?
@objc var type, status: String?
enum CodingKeys: String, CodingKey {
case stepCompleted = "step_completed"
case userID = "user_id"
case authkey
case type, status
}
}