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 的转换?

在 Swift 4 中解码小写和大写 JSON 键

如何在 Swift 3 中使用 NSSecureCoding 解码字符串?

在 Swift 中解码引用的可打印消息

如何在 Swift 中解码 HTML 实体?

如何大写来自 Swift 子类的 UILabel 的文本属性