Swift 4 - 解码期间字符串转换为大写
Posted
技术标签:
【中文标题】Swift 4 - 解码期间字符串转换为大写【英文标题】:Swift 4 - String Conversion to Capital Case During Decoding 【发布时间】:2018-09-01 11:28:58 【问题描述】:在使用 Swift 4 解码 JSON 时,我想在解码过程中将字符串转换为大写。 JSON 将其存储为大写
例如
let title = "I CANT STAND THE RAIN"
print(title.capitalized)
如何在解码过程中执行此操作,以便将字符串以大写形式存储在我的模型中?
唯一需要注意的是,我只想将 JSON(标题)中的一个属性大写,而不是其余的。
struct Book: Decodable
let title: String
let author: String
let genre: String
init(newTitle: String, newAuthor: String, newGenre: String)
title = newTitle
author = newAuthor
genre = newGenre
let book = try! decoder.decode(Book.self, from: jsonData)
【问题讨论】:
不相关但使用struct
,您无需提供自己的init
即可设置所有属性的值。 struct
默认为您提供。
【参考方案1】:
您可以为您的结构提供您自己的自定义可解码初始化器。
struct Book: Decodable
let title: String
let author: String
let genre: String
init(from decoder: Decoder) throws
let values = try decoder.container(keyedBy: CodingKeys.self)
title = try values.decode(String.self, forKey: .title).capitalized
author = try values.decode(String.self, forKey: .author)
genre = try values.decode(String.self, forKey: .genre)
enum CodingKeys: String, CodingKey
case title, author, genre
【讨论】:
【参考方案2】:jsonString.replace(/"\s*:\s*"[^"]/g, match =>
return match.slice(0, -1) + match[match.length - 1].toUpperCase()
)
【讨论】:
仅仅发布一些代码并不是很有帮助。你能解释一下你的代码吗?这样其他人就可以理解并从您的答案中学习,而不仅仅是从网络上复制和粘贴一些代码。以上是关于Swift 4 - 解码期间字符串转换为大写的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 4 的 Codable 进行解码时,是啥阻止了我从 String 到 Int 的转换?