我正在构建(研究目的)一个类似于 Snapchat 的解决方案。这个想法是将图片发送给另一个可以打开它的人。信息被保存到 Firebase-Realtime-Database,一旦接收者点击,就会显示该图像。
我正在使用 Xcode 11.2、Swift4、IOS13、macOS Catalina、SDWebImage (5.2.3)
override func viewDidLoad() {
super.viewDidLoad()
details.text = snap.description
let url = URL(fileURLWithPath: snap.urlImage)
print("URL 1 \(url) - end")
print("URL 2 \(snap.urlImage) - end")
imagem.sd_setImage(with: url) { (image, error, cache, url) in
print("Message 1")
}
}
保存到 Firebase 的网址正常且工作正常(我可以复制/粘贴到浏览器并下载图片)。
下面是上面代码的结果: print("URL 1 (url) - 结束") 结果 https://firebasestorage.googleapis.com/v0/b/snapchat-xxxxx.appspot.com/o/images%252FBA5008FB-7D2E-4091-B995-E37879EAB1A2.jpg%3Falt=media&token=72146333-fe8e-4add-be52-1caf037cd1d6 -- 文件:///- 结束
print("URL 2 (snap.urlImage) - 结束") https://firebasestorage.googleapis.com/v0/b/snapchat-xxxxx.appspot.com/o/images%2FBA5008FB-7D2E-4091-B995-E37879EAB1A2.jpg?alt=media&token=72146333-fe8e-4add-be52-1caf037cd1d6 - 结束
如您所见,使用 URL(fileURLWithPath: snap.urlImage) 后,“--file:///”会添加到“url”常量的末尾。
如果我在 sd_setImage 行中用 snap.urlImage 替换 url,则它不起作用 (imagem.sd_setImage(with: snap.urlImage)...)
有人知道发生了什么吗?
谢谢
最佳答案
init(fileURLWithPath path: String)
Initializes a newly created file URL referencing the local file or directory at path
init(fileURLWithPath:) 将传入的字符串解释为本地文件路径,我认为您不想要它。例如,如果您想将该文件写入本地磁盘,则可以使用它。
您实际上要查找的是服务器上文件的 url 路径。
let urlToImage = URL(string: snap.urlImage)
请记住,这将返回一个可选值,因此最好像这样保护您的代码
if let urlToImage = URL(string: snap.urlImage) {
imagem.sd_setImage(with: urlToImage)...
} else {
print("could not find file at that url") //or some other error
}
另外,为了可读性,我建议使用不同的变量名称... urlImage
听起来像是一个 Image 或 NSImage,而不是路径。 imageUrl
是一个更好的名称,因为它是图像的 url。
关于swift - URL(fileURLWithPath : snap. urlImage) 命令未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58414082/