Почти наверняка это правильная реализация:
struct Member: Codable {
var id: Int
var firstName: String // "first name" is two words, so capitalize "name"
var lastName: String
var address: String // "No address" should be empty, not nil
var zipCode: String // ZIP codes are not integers
var city: String // "No city" should be empty, not nil
}
Чтобы сохранить это в виде списка, используйте PropertyListEncoder:
let data = try PropertyListEncoder().encode(member)
Чтобы прочитать его, используйте PropertyListDecoder.
Codable автоматически создает сопоставления клавиш для ваших свойств, поэтому в Value нет необходимости.
Вам следует строго избегать создания или использования [String: Any]
словарей.Они существуют главным образом из-за интерфейсов Objective C, которые не могли генерировать сильные типы.
Если address
, zipCode
и city
все должны быть установлены вместе, или не установлены вместе, то вы должны собратьих в единую структуру:
struct Address: Codable {
var streetAddress: String
var zipCode: String
var city: String
}
struct Member: Codable {
var id: Int
var firstName: String // "first name" is two words, so capitalize "name"
var lastName: String
var address: Address?
}
В этом случае и Optional имеет смысл, потому что «пустой» - это не то же самое, что «отсутствующий».