带有空字段的 Swift ui 可编码结构

问题描述

我有以下结构:

struct Responsetoken: Identifiable,Codable,Hashable {
    var id: UUID { return UUID() }
    let access_token: String
    enum CodingKeys: String,CodingKey {
        case access_token
    }
}

struct ResponseUserInfo: Identifiable,Hashable {
    var id: UUID { return UUID() }
    let login,avatar_url,html_url,created_at,updated_at: String
    let public_repos,public_gists,followers,following: Int
    enum CodingKeys: String,CodingKey {
        case login,public_repos,following,updated_at
    }
}

我想避免每次声明空对象时都这样做:

var token: Responsetoken = Responsetoken(access_token: "")

var userInfo: ResponseUserInfo =
ResponseUserInfo(login: "",avatar_url: "",html_url: "",created_at: "",updated_at: "",public_repos: 0,public_gists: 0,followers: 0,following: 0)

我想要的结果是这样的:

var token: Responsetoken = Responsetoken()
var userInfo: ResponseUserInfo = ResponseUserInfo()

你能帮我一把吗?

解决方法

一个可能的解决方案是一个静态属性,例如创建一个空结构

struct ResponseToken: Identifiable,Codable,Hashable {
    let id = UUID()
    let accessToken: String
    enum CodingKeys: String,CodingKey {
        case accessToken = "access_token"
    }

    static let empty = ResponseToken(accessToken: "")
}

并使用它

let token = ResponseToken.empty

注意事项:

  • 返回 UUID 的计算属性毫无意义,声明一个常量。
  • 如果您无论如何要指定 CodingKeys,也可以使用它们来转换 snake_case 键。