gpt4 book ai didi

swift - 在 Swift 中使图像 URL 字符串符合 Viewable 协议(protocol)?

转载 作者:行者123 更新时间:2023-11-30 10:35:21 24 4
gpt4 key购买 nike

我正在尝试实现 Viewer我的 Swift 项目中包含 pod 包,并根据我需要创建符合下面 Viewable 协议(protocol)的项目集合。

如何使下面的 for-loop 中的图像 String 符合下面的 Viewable 协议(protocol)?

协议(protocol):

public enum ViewableType: String {
case image
case video
}

public protocol Viewable {
var type: ViewableType { get }
var assetID: String? { get }
var url: String? { get }
var placeholder: UIImage { get }

func media(_ completion: @escaping (_ image: UIImage?, _ error: NSError?) -> Void)
}

这是我的代码:

    var images = [String]()
var viewableImages = [Viewable]()

override func viewDidLoad() {

loadViewableImages()

}

fileprivate func loadViewableImages(){

viewableImages.removeAll()

for image in images{
viewableImages.append(image) //need to append a Viewable type image not a String
}


}//end func

最佳答案

我认为更好的选择是创建一个单独的类(在本例中为Image),该类将确认Viewable协议(protocol):

class Image: Viewable {
var type: ViewableType {
return .image
}
let assetID: String? = UUID().uuidString
let placeholder = UIImage()

let url: String?

init(url: String) {
self.url = url
}

func media(_ completion: @escaping (_ image: UIImage?, _ error: NSError?) -> Void) {
guard let url = url else {
completion(nil, nil)
return
}
guard let imageURL = URL(string: url) else {
completion(nil, nil)
return
}
URLSession.shared.dataTask(with: imageURL) { (data, response, error) in
DispatchQueue.main.async { //all changes to UI must be called on main thread
if let error = error {
print("Error: \(error)")
completion(nil, error)
return
}
completion(UIImage(data: data), nil)
}
}.resume()
}
}

您需要将循环更改为:

for image in images{
viewableImages.append(Image(url: image))
}

关于swift - 在 Swift 中使图像 URL 字符串符合 Viewable 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58178796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com