【发布时间】:2018-06-29 07:06:14
【问题描述】:
我使用带有 JSONEncoder 和 JSONDecoder 的 Codable 协议。
但是我保存数据的时候,只保存了最后一个值,但是我需要保存多个。
如果我添加三张卡片,我只能看到最后一张。
例子:
我加卡:
CName: Test1, BarCode: 12345, CardNBR: 12345
CName: Test2, BarCode: 1234567, CardNBR: 1234567
CName: Test3, BarCode: 123456789, CardNBR: 123456789
最后我只看到:CName: Test3, BarCode: 123456789, CardNBR: 123456789
如何保存多个数据?
struct Entity : Codable {
var cname: String
var barcode: String
var cardnbr: String
}
保存
let arr = Entity(cname: CompanyName, barcode: BarCodeField, cardnbr: CardNumber)
do {
let data = try JSONEncoder().encode(all)
UserDefaults.standard.set(data, forKey: "Key")
} catch {
print(error)
}
加载
do {
let content = UserDefaults.standard.data(forKey: "Key")
let saved = try JSONDecoder().decode([Entity].self, from: content!)
print(saved)
} catch {
print(error)
}
新
let arr = Entity(cname: CompanyName, barcode: BarCodeField, cardnbr: CardNumber)
let jsonEncoder = JSONEncoder()
do {
var jsonData = try jsonEncoder.encode(arr)
let jsonString = String(data: jsonData, encoding: .utf8)
print("JSON String : " + jsonString!)
let jsonDecoder = JSONDecoder()
let upMovie = try jsonDecoder.decode(Entity.self, from: jsonData)
print("upMovie : \(upMovie)")
print("cname : \(arr.cname)")
print("barcode : \(arr.barcode)")
print("cardnbr : \(arr.cardnbr)")
entities.append(Entity(cname: arr.cname, barcode: arr.barcode, cardnbr: arr.cardnbr))
print(entities)
}
catch {
}
【问题讨论】:
-
您的
let all = []行仅创建Entity的单个实例。您不会显示用于制作单独实例并将它们添加到数组中的代码。 -
首先请遵守变量名以小写字母开头的命名约定。
all保存时只包含一项。 -
您好,我认为本教程将帮助您获得所需的内容,请访问链接。 ashishkakkad.com/2017/06/…
-
@hardikvyas 要使用本教程,我仍然只保存最后一个值 JSON 字符串:{"cname":"Test3","barcode":"123456789","cardnbr":"123456789"}
-
@hardikvyas 我有数组 var entity = [Entity]() 我需要做这个来向这个数组添加数据?:entities.append(Entity(cname: arr. cname,条形码:arr.barcode,cardnbr:arr.cardnbr))
标签: arrays swift data-structures codable