【问题标题】:Swift ui codable struct with empty fields带有空字段的 Swift ui 可编码结构
【发布时间】:2021-09-23 18:01:45
【问题描述】:

我有以下结构:

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

struct ResponseUserInfo: Identifiable, Codable, 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, avatar_url, html_url, public_repos, public_gists, followers, following, created_at, 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()

你能帮帮我吗?

【问题讨论】:

标签: swift codable decodable


【解决方案1】:

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

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 键。

【讨论】:

    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多