如何将 png 文件包含在 JSON 文件中的 Swift 对象中?

How do you include png files in a Swift object from a JSON file?

我的 phone 正在将 Xcode JSON 文件中的数据解析为 Codable 模型中的对象,并使用 WCSession 传递数据以供观察。一切都很好。

JSON 文件仅包含 URLs/paths 图像而不是实际图像,所以我如何从我的 Xcode 项目目录添加图像作为同一 JSON 的一部分?

我要添加指向一组图像的 JSON 文件的本地路径?然后在我的数据对象中添加一个属性 let profile : UIImage?它会是一个单独的结构数据对象吗?使用实时 URL 中的虚拟图像会更容易吗?我实际上如何将图像传递给 table 中的 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)

        //...
    }       
    }

传递图像的 Data 怎么样?

您的 Codable 模型可以包括这样的 属性:

var imageData: Data

然后你可以这样设置:

imageData = someUIImage.pngData()!

编码后,JSON 会变成:

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

要从数据中获取图像,只需执行以下操作:

UIImage(data: imageData)

如果您想事先创建 JSON 文件(不是即时创建)并且您的图像不打算更改,那么您可以将图像转换为 base64 编码的字符串,例如this one 然后将这些字符串添加到 JSON 文件:

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

稍后为每个 base64 编码图像创建一个 Data 对象并最终创建一个 UIImage 将与此类似:

if let imageData = Data(base64Encoded: img1Base64) {        
    if let image = UIImage(data: imageData) {
        imageView.image = image
    }        
}