Как включить файлы PNG в объект Swift из файла JSON? - PullRequest
0 голосов
/ 20 ноября 2018

Мой телефон анализирует данные из файла Xcode JSON для объектов из модели Codable и передает данные для просмотра с помощью WCSession. Все отлично работает

JSON-файлы содержат только URL-адреса / пути к изображениям, а не фактические изображения. Так как же добавить изображения из каталога проекта XCode как часть того же JSON?

Я бы добавил локальный путь к файлу JSON, указывающий на набор изображений? Затем добавить свойство let profile : UIImage в мой объект данных? Это будет отдельный объект данных структуры? Будет ли проще использовать фиктивные изображения с живых URL-адресов? Как бы я на самом деле передать изображение в UIImage / WKInterfaceImage в таблице?


    struct MessageObject : Codable {

    var title : String
    //...

    enum MessageKeys: String, CodingKey {
        //...
    }
    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: MessageKeys.self)

        self.title = try container.decode(String.self, forKey: .title)
        //...
    }

    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: MessageKeys.self)

        //...
    }       
    }

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Если вы хотите заранее создать файл JSON (не на лету) и ваши изображения не должны изменяться, то вы можете преобразовать свои изображения в строки в кодировке base64 на сайте, таком как этот , а затем добавьте эти строки в файл JSON:

{
    "image1": "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHL..."    
    "image2": "G2qoAEpaUQIZD4QYT4A62AHzQUqOiTgsgPEBCJIKAVJF..."    
    ...
}

Создание объекта данных и, в конечном итоге, UIImage для каждого изображения в кодировке base64 в дальнейшем будет выглядеть так:

if let imageData = Data(base64Encoded: img1Base64) {        
    if let image = UIImage(data: imageData) {
        imageView.image = image
    }        
}
0 голосов
/ 20 ноября 2018

Как насчет передачи Data изображения?

Ваша модель Codable может содержать свойство, подобное этому:

var imageData: Data

И тогда вы можете установить его следующим образом:

imageData = someUIImage.pngData()!

Когда вы кодируете его, JSON станет примерно таким:

{"imageData":"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAABxpRE9UAAAAAgAAAAAAAAAEAAAAKAAAAAQAAAAEAAAAWxzQ72oAAAAnSURBVCgVYjhzeOX\/\/1+uYGCQOAgz4JPEqgCmE0SDNKOYgC4JUgAAAAD\/\/ytw2SEAAAAnSURBVGP4\/+XKfxA+c3glHMPEQDQDPkmwAlw6YaYwwBTABJBpkBwAoM\/kGdRps6oAAAAASUVORK5CYII="}

Чтобы получить изображение из данных, просто выполните:

UIImage(data: imageData)
...