如何将字符串转换为网址

问题描述 投票:0回答:1

我正在尝试将我的视频网址上传到 firebase,但我在视图模型上使用的当前代码不允许我将我的数据上传到 firebase 我在尝试将我的视频上传到 firebase 时收到此错误

无法转换“String”类型的值?预期参数类型“URL”

guard let videoUrl = try await VideoUploader.uploadVideoToStorage(withUrl: videoUrl) else { return }

如何将字符串转换为 url 以将视频上传到 firebase ?

import SwiftUI
import Firebase
import PhotosUI
import FirebaseStorage
import FirebaseFirestoreSwift

@MainActor
class UploadPostViewModel: NSObject, ObservableObject {
    
    
    
    @Published var didUploadPost = false
    @Published var isLoading = false
    @Published var error: Error?
    @Published var videos = [Video]()
    @Published var mediaPreview: Movie?
    @Published var selectedVideoUrl: URL?
    @Published var profileImage: Image?
    @Published var text = ""
    @Published var selectedImage: PhotosPickerItem? {
        didSet { Task { await loadImage(fromItem: selectedImage)
            
            Task { await loadVideo(fromItem: selectedImage) }
        }
            
        }
        
    }
    
    private var uiImage: UIImage?
    private var videoData: Data?
    func uploadPost(caption: String) async throws {
        guard let uid = Auth.auth().currentUser?.uid else { return }
        
        
        
        var videoUrl: String? = nil
       
        
        let url = URL(string: videoUrl!)
        guard let videoUrl = try await VideoUploader.uploadVideoToStorage(withUrl: videoUrl) else { return }
        try await Firestore.firestore().collection("videos").document().setData(["videoUrl": videoUrl])
        
    
            
            
            
            
            var imageUrl: String? = nil
            if let image = uiImage {
                imageUrl = try await ImageUploader.uploadImage(image: image , type: .post)
            }
            
            let post = Post(
                ownerUid: uid,
                text: text,
                videoUrl: videoUrl, likes: 0,
                replyCount: 23,
                imageUrl: imageUrl, timestamp: Timestamp()
            )
            
            try await PostService.uploadPost(post)
            self.didUploadPost = true
            
            
            
        
                
        
        
    }
    
    func loadImage(fromItem item: PhotosPickerItem?) async {
        guard let item = item else { return }
        
        guard let data = try? await item.loadTransferable(type: Data.self) else { return }
        guard let uiImage = UIImage(data: data) else { return }
        self.uiImage = uiImage
        self.profileImage = Image(uiImage: uiImage)
    }
    func fetchVideos() async throws {
        let snapshot = try await Firestore.firestore().collection("videos").getDocuments()
        self.videos = snapshot.documents.compactMap({ try? $0.data(as: Video.self) })
    }
    func loadVideo(fromItem item: PhotosPickerItem?) async {
        guard let item = item else { return }
        
        do {
            guard let movie = try await item.loadTransferable(type: Movie.self) else { return }
            self.mediaPreview = movie
        } catch {
            print("DEBUG: Failed with error \(error.localizedDescription)")
        }
    }
}
ios string url swiftui viewmodel
1个回答
0
投票

这是将字符串转换为 URL 的简单方法

let url = URL(string: "https://www.example.com")
© www.soinside.com 2019 - 2024. All rights reserved.