SwiftUI-从Cloudkit获取图像

时间:2019-08-30 08:12:01

标签: cloudkit swiftui

我正在尝试找出从Cloudkit服务器获取图像的最佳实践。

我没有找到Apple的文档,也没有任何教程,所以想问一下这是否正确。

真的很感谢任何人都可以提供帮助。

import SwiftUI
import UIKit
import CloudKit

struct CustomProductImage: View {
    var product: Product
    @State var isImageLoaded: Bool = false

    var body: some View {
         VStack {
            if isImageLoaded {
                Image(uiImage: ImageCacheHandler.shared.image(forRecord: product.mId ?? "") ?? #imageLiteral(resourceName: "ProductImage"))
                .resizable()
                .aspectRatio(0.7294117647, contentMode: .fit)
                    .cornerRadius(5.0)
            } else {
                Image(uiImage: #imageLiteral(resourceName: "ProductImage"))
                    .resizable()
                    .aspectRatio(0.7294117647, contentMode: .fit)
            }
        }
         .frame(width: 218, height: 300)
         .onAppear {
            self.getImage()
        }

    }

    func getImage() {
            if ImageCacheHandler.shared.image(forRecord: product.mId ?? "") == nil && !self.isImageLoaded {
                loadImage()
            } else {
                self.isImageLoaded = true
            }
    }


    func loadImage() {
        CloudKitManager.shared.getRecords(withRecordId: [product.mId ?? ""],
                                          pDesiredkeys: [CloudKitConstants.imageurl],
                                          pQualityOfService: .utility,
                                        comp: { (records, error) in
            if let record = records?[CKRecord.ID(recordName: self.product.mId ?? "")],
                let image = record[CloudKitConstants.imageurl] as? Data {
                ImageCacheHandler.shared.cacheImage(data: image, id: self.product.mId ?? "")
                self.isImageLoaded = true
            }
        })
    }
}

欢呼

0 个答案:

没有答案