Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios WebImage作为TabView SwiftUI中的TabItem_Ios_Swift_Swiftui_Tabview_Tabitem - Fatal编程技术网

Ios WebImage作为TabView SwiftUI中的TabItem

Ios WebImage作为TabView SwiftUI中的TabItem,ios,swift,swiftui,tabview,tabitem,Ios,Swift,Swiftui,Tabview,Tabitem,我正在尝试将URL中的图像显示为TabView的tabItem。我用SDWebImageSwiftUI尝试了它,但它不起作用,所以我现在尝试的是将图像存储在文档目录中,并从那里加载为UIImage 这是我到目前为止编写的代码,但它不起作用。但是,如果我加载系统映像,那么它可以正常工作 import SwiftUI import Alamofire struct ContentView: View { var body: some View { TabView {

我正在尝试将URL中的图像显示为TabView的tabItem。我用SDWebImageSwiftUI尝试了它,但它不起作用,所以我现在尝试的是将图像存储在文档目录中,并从那里加载为UIImage

这是我到目前为止编写的代码,但它不起作用。但是,如果我加载系统映像,那么它可以正常工作

import SwiftUI
import Alamofire
 
struct ContentView: View {
    var body: some View {
        TabView {
            VStack {
                Text("Hello")
            }
            .onAppear(perform: {
                self.saveAvatarImage(fromUrl: "https://gmsrp.cachefly.net/images/20/05/15/65e1de275864fb9c73b7be374315481a/960.jpg")
            })
            .frame(maxWidth:.infinity,maxHeight: .infinity)
            .tabItem {
                Image(uiImage: getAvatarImage() ?? UIImage.init(systemName: "star.fill")!)
                    .frame(width:20,height: 20)
            }
        }
    }
    
    func avatarFolderUrl() -> URL {
        return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("Avatar", isDirectory: true)
    }

    func saveAvatarImage(fromUrl url:String) {
        
        guard let avatarUrl = URL.init(string: url) else {
            return
        }
        
        DispatchQueue.global().async {

            let destination: DownloadRequest.Destination = { _, _ in
                let documentsURL = self.avatarFolderUrl()
                let fileURL = documentsURL.appendingPathComponent("avatar.jpg")
                return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
            }

            AF.download(URLRequest.init(url: avatarUrl), to: destination)
                .response { (response) in
                    switch response.result {
                    case .success:
                        let documentsURL = self.avatarFolderUrl()
                        let fileURL = documentsURL.appendingPathComponent("avatar.jpg")
                        
                        if FileManager.default.fileExists(atPath: fileURL.path) {
                            if let image = UIImage.init(contentsOfFile: fileURL.path) {
                                if let compressedImageData = image.jpegData(compressionQuality: 1.0) {
                                    try? compressedImageData.write(to: fileURL)
                                }
                            }
                        }
                    case .failure(let error):
                        debugPrint("Failed to download : \(error)")
                    }
                }
        }
    }

    func getAvatarImage() -> UIImage? {
        let documentsURL = avatarFolderUrl()
        let fileURL = documentsURL.appendingPathComponent("avatar.jpg")
        if FileManager.default.fileExists(atPath: fileURL.path) {
            if let image = UIImage.init(contentsOfFile: fileURL.path) {
                debugPrint("Loading Profile From \(fileURL.path)")
                return image
            }
        }
        return nil
    }
}
这里左边的是上面代码的输出。它显示的是蓝色视图而不是图像。正确的方法是加载系统映像时