Swift 4 - преобразование строки в заглавную букву при декодировании - PullRequest
0 голосов
/ 01 сентября 2018

При декодировании JSON с помощью Swift 4 я хотел бы преобразовать строку во время декодирования в прописную букву. 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)

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Вы можете предоставить собственный настраиваемый инициализатор Decodable для своей структуры.

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
    }
}
0 голосов
/ 01 сентября 2018
jsonString.replace(/"\s*:\s*"[^"]/g, match => {
  return match.slice(0, -1) + match[match.length - 1].toUpperCase()
})
...