我有以下var需要更改/更新,例如&#39; 键&#39; <&em> 39; ,其中包含用户输入的值。
var calendarEvent = [
"subject": "Let's go for lunch",
"body": [
"contentType": "HTML",
"content": "Does late morning work for you?",
],
"start": [
"dateTime":"2017-12-10T12:55:00",
"timeZone": "W. Europe Standard Time"
],
"end": [
"dateTime": "2017-12-10T14:00:00",
"timeZone": "W. Europe Standard Time"
],
"location": [
"displayName": "Antwerpen"
],
"attendees": [],
] as [String: AnyObject]
让我们说我们不关心用户输入 - 因为它只是一个字符串 - 而只是想用这个词替换值&#39; yea boi&#39; 。
我该怎么做?
答案 0 :(得分:1)
最不容易出错,最容易和最便携的方法是定义结构并使用Codable
协议以及JsonEncoder
和JsonDecoder
来为您的JSON字符串读取和写入端点。然后,如果您需要更改某个key
,您可以将其视为任何其他结构并直接更改。
import Foundation
// structures for encoding/decoding
struct Body: Codable {
let contentType: String
let content: String
}
struct Time: Codable {
let dateTime: String
let timeZone: String
}
struct Location: Codable {
let displayName: String
}
struct CalendarEvent: Codable {
var subject: String // mutable
let body: Body
let start: Time
let end: Time
let location: Location
let attendees: [String]
}
// set up structure
var event = CalendarEvent(subject: "Let's go for lunch",
body: Body(contentType: "HTML",
content: "Does late morning work for you?"),
start: Time(dateTime:"2017-12-10T12:55:00",
timeZone: "W. Europe Standard Time"),
end: Time(dateTime:"2017-12-10T14:00:00",
timeZone: "W. Europe Standard Time"),
location: Location(displayName: "Antwerpen"),
attendees: [])
// change the subject
event.subject = "yea boi"
// create encoder
let jsonEncoder = JSONEncoder()
jsonEncoder.outputFormatting = [.prettyPrinted, .sortedKeys]
// encode, convert to a String, and print it
if let jsonData = try? jsonEncoder.encode(event),
let jsonString = String(data: jsonData, encoding: .utf8) {
print(jsonString)
}
// output
/* {
"attendees" : [],
"body" : {
"content" : "Does late morning work for you?",
"contentType" : "HTML"
},
"end" : {
"dateTime" : "2017-12-10T14:00:00",
"timeZone" : "W. Europe Standard Time"
},
"location" : {
"displayName" : "Antwerpen"
},
"start" : {
"dateTime" : "2017-12-10T12:55:00",
"timeZone" : "W. Europe Standard Time"
},
"subject" : "yea boi"
}
*/
注意变异的主题,从“让我们去吃午餐”改为“是的boi”。