Как я могу использовать JSONDecoder для декодирования Int в строку? - PullRequest
0 голосов
/ 14 октября 2019

Я анализирую JSON из API, например:

let model = try? JSONDecoder().decode(Person.self, from: parsedData) 

// MARK: - Person
struct Person: Codable {
    let position 
    let rank: Int
}

Проблема в том, что я хочу установить значение UILabel с помощью rank, потому чтоЯ хочу добавить '#', поэтому я должен сделать это следующим образом:

labelRank.text = "#" + "\(person.rank)"

, когда на самом деле я хотел сделать:

labelRank.text = person.rank

Так что на самом деле я хочуиметь пользовательский анализ от Int до String. Как мне достичь этого результата?

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Вы можете иметь вычисляемое свойство rankAsString , которое будет возвращать "#" + "\(rank)" в структуре Person следующим образом.

struct Person: Codable {
    let position: Int
    let rank: Int

    var rankAsString: String {
        return "#" + "\(self.rank)"
    }
}

И затем использовать это для заполнения метки следующим образом.

labelRank.text = rankAsString

Надеюсь, это поможет.

1 голос
/ 14 октября 2019

Можно попробовать

struct Person: Codable  {

    var position: Int 
    var rank: String

    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        position = try container.decode(Int.self, forKey: .position)
        let decodedName = try container.decode(Int.self, forKey: .rank)
        rank = "# \(decodedName)" 
    }
}
...