swift - 使用 Swift 为可解码类型创建通用数据初始值设定项

标签 swift extension-methods init convenience-methods

@objcMembers
public class MyResponse: NSObject, Codable {
    public let id: String?
    public let context: String?
    public let results: [MyResult]?
}

从类扩展中的数据解析 MyResponse 的正确方法是什么?

我尝试了以下操作,但出现错误“无法分配给值:'self' 是不可变的。 无法将类型“MyResponse”的值分配给类型“Self”。”

extension MyResponse {
    public convenience init(data: Data) throws {
        self = try JSONDecoder().decode(MyResponse.self, from: data)
    }
}

最佳答案

您可以扩展Decodable 协议(protocol)并创建一个通用初始化器:

extension Decodable {
    public init(data: Data, using decoder: JSONDecoder = JSONDecoder()) throws {
        self = try decoder.decode(Self.self, from: data)
    }
}

关于swift - 使用 Swift 为可解码类型创建通用数据初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65615354/

相关文章:

swift - 需要初始化?(编码器 aDecoder : NSCoder) not called

init - Yocto 使用 .bbappend 文件覆盖 initramfs 的默认初始化脚本的编写

ios - 如何在 Swift 3 中向 CNMutableContact 添加新电子邮件?

ios - Swift 中的 Material "pull to refresh"?

c# - 如何在 C# 中分配委托(delegate)扩展方法?

linux - 如何在引导 linux 时启用或禁用其他服务

ios - 如何在 Swift3 中的 UISearchBar 上设置边框底部

swift - 闭包与从函数返回值/对象

C#:发现扩展方法

swift - Interface Builder 中自定义类的模块不正确