通过附加字符串更新对象键的计数
Updating the count of an object's keys by appending a string
WatchKit 有一个 presenter 方法,它呈现一个带有预定文本回复的 QuickReplyButton,这些回复可以发送到 UI 元素,例如 [=] 中的标签32=]。
我已将该行插入到最后一个位置,但是每个后续调用都会在上方插入新回复,而不是在下方。
我尝试使用 self.chats.append(text as AnyObject)
将文本选择选项附加到聊天模型消息数组的末尾,但该选项是一个字符串,我无法将字符串附加到聊天模型数组。 Value of type 'String' does not conform to 'AnyObject'
。如果我完全省略 self.chats.append(text as AnyObject)
,它会如图所示工作。
ChatDetailController
// ...
// start of @IBAction
// ...
self.chats.append(text as AnyObject) // how do I write this?
let newIndex = self.chats.count - 1
//...
})
型号
public struct ChatModel: Codable {
public var message: String
// more properties
enum CodingKeys: String, CodingKey {
case message = "messageText"
// more properties
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.message = try container.decode(String.self, forKey: .message)
// more properties
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(self.message, forKey: .message)
// more properties
}
}
json
[
{
"fromId": "wx1234skjksmsjdfwe234",
"toId": "wx43922sdkfjsfmmxdfmx",
"messageText": "Have you hopped on the bus Gus?",
"imageUrl": "https://i.imgur.com/PJcyle7.jpg",
"read": "true"
},
// more objects.
]
我已经更新了您的 ChatModel。使用此模型结构。您可以从 json 解码器或 运行 时间值初始化。
public struct ChatModel: Codable {
public var message: String
public var fromId: String
public var toId: String
public var imageUrl: URL?
enum CodingKeys: String, CodingKey {
case message = "messageText"
case fromId = "fromId"
case toId = "toId"
case imageUrl = "imageUrl"
//case read = "read"
}
init (message:String , fromId:String, toID : String, imgUrl : URL?) {
self.message = message
self.fromId = fromId
self.toId = toID
self.imageUrl = imgUrl
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.message = try container.decode(String.self, forKey: .message)
self.fromId = try container.decode(String.self, forKey: .fromId)
self.toId = try container.decode(String.self, forKey: .toId)
self.imageUrl = try container.decode(URL.self, forKey: .imageUrl)
//self.read = try container.decode(Bool.self, forKey: .read)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(self.message, forKey: .message)
try container.encode(self.fromId, forKey: .fromId)
try container.encode(self.toId, forKey: .toId)
try container.encode(self.imageUrl, forKey: .imageUrl)
//try container.encode(self.read, forKey: .read)
}
}
这就是创建 chatModel 对象以插入聊天数组的方法
注意:使用您从 json
收到的相同的 fromID 和 ToID
let newChat = ChatModel(message: "test", fromId: "fromID", toID: "tOID", imgUrl: nil)
self.chats.append(newChat)
现在在 table 的末尾插入行
WatchKit 有一个 presenter 方法,它呈现一个带有预定文本回复的 QuickReplyButton,这些回复可以发送到 UI 元素,例如 [=] 中的标签32=]。
我已将该行插入到最后一个位置,但是每个后续调用都会在上方插入新回复,而不是在下方。
我尝试使用 self.chats.append(text as AnyObject)
将文本选择选项附加到聊天模型消息数组的末尾,但该选项是一个字符串,我无法将字符串附加到聊天模型数组。 Value of type 'String' does not conform to 'AnyObject'
。如果我完全省略 self.chats.append(text as AnyObject)
,它会如图所示工作。
ChatDetailController
// ...
// start of @IBAction
// ...
self.chats.append(text as AnyObject) // how do I write this?
let newIndex = self.chats.count - 1
//...
})
型号
public struct ChatModel: Codable {
public var message: String
// more properties
enum CodingKeys: String, CodingKey {
case message = "messageText"
// more properties
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.message = try container.decode(String.self, forKey: .message)
// more properties
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(self.message, forKey: .message)
// more properties
}
}
json
[
{
"fromId": "wx1234skjksmsjdfwe234",
"toId": "wx43922sdkfjsfmmxdfmx",
"messageText": "Have you hopped on the bus Gus?",
"imageUrl": "https://i.imgur.com/PJcyle7.jpg",
"read": "true"
},
// more objects.
]
我已经更新了您的 ChatModel。使用此模型结构。您可以从 json 解码器或 运行 时间值初始化。
public struct ChatModel: Codable {
public var message: String
public var fromId: String
public var toId: String
public var imageUrl: URL?
enum CodingKeys: String, CodingKey {
case message = "messageText"
case fromId = "fromId"
case toId = "toId"
case imageUrl = "imageUrl"
//case read = "read"
}
init (message:String , fromId:String, toID : String, imgUrl : URL?) {
self.message = message
self.fromId = fromId
self.toId = toID
self.imageUrl = imgUrl
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.message = try container.decode(String.self, forKey: .message)
self.fromId = try container.decode(String.self, forKey: .fromId)
self.toId = try container.decode(String.self, forKey: .toId)
self.imageUrl = try container.decode(URL.self, forKey: .imageUrl)
//self.read = try container.decode(Bool.self, forKey: .read)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(self.message, forKey: .message)
try container.encode(self.fromId, forKey: .fromId)
try container.encode(self.toId, forKey: .toId)
try container.encode(self.imageUrl, forKey: .imageUrl)
//try container.encode(self.read, forKey: .read)
}
}
这就是创建 chatModel 对象以插入聊天数组的方法
注意:使用您从 json
收到的相同的 fromID 和 ToID let newChat = ChatModel(message: "test", fromId: "fromID", toID: "tOID", imgUrl: nil)
self.chats.append(newChat)
现在在 table 的末尾插入行