问题描述
我有以下结构:
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 键。