微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

快速获取可编码的属性名称作为字符串 编辑

如何解决快速获取可编码的属性名称作为字符串 编辑

编辑

let disucssionMessageTimestampKey = discussionMessage.CodingKeys.messageTimestamp.stringValue 给出错误

'CodingKeys' is inaccessible due to 'private' protection level


我有一个这样定义的消息结构:

struct discussionMessage: Codable {
    let message,userCountryCode,userCountryEmoji,userName,userEmailAddress: String
    let messageTimestamp: Double
    let fcmToken,question,recordingUrl,profilePictureUrl: String?
}

我想定义一个变量 disucssionMessageTimestampKey,其值为 messageTimestamp。我想在以下查询中使用 disucssionMessageTimestampKey 变量:

messagesReference.queryOrdered(byChild: "messageTimestamp").queryStarting(atValue: NSDate().timeIntervalSince1970).observe(.childAdded)

这样我就不必对变量名称的字符串值(“messageTimestamp”)进行硬编码。

现在我知道我可以只做 let disucssionMessageTimestampKey: String = "messageTimestamp"。但这又容易出错。所以我想知道是否有一种方法可以获取字符串messageTimestamp 而无需在任何地方定义它。

像这样(我知道这行不通,只是为了让我知道我在找什么)

let disucssionMessageTimestampKey: String = String(describing: discussionMessage.messageTimestamp) // Will store disucssionMessageTimestampKey = "messageTimestamp"

另外,是否可以首先将键值完全定义为字符串,然后将它们用作实际可编码对象中的变量名? IE。首先定义let disucssionMessageTimestampKey: String = "messageTimestamp",然后使用变量disucssionMessageTimestampKey定义可编码对象的属性(messageTimestamp)应该被调用。 (这是低优先级但很好奇,似乎与手头的问题有关)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。