我想从字典中的字符串创建URL
,但是当我初始化它时,guard语句转到else
语句,因为values["Image"]
是nil
和{{ 1}}这个功能。这是我的一段代码
return
我在代码中创建了一个断点:
这是我在此断点处的控制台日志:
我错过了什么?
P.S 我试着这样做:
guard let imageURLInDatabase = URL(string: values["Image"]!) else { return }
let data = NSData(contentsOf: imageURLInDatabase)
但我收到错误消息let imageURLInDatabase = URL(string: values["Image"]!)
编辑1: 我试着像
那样做unexpectedly found nil while unwrapping an optional value
所以 guard let imageString = values["Image"] else{return}
guard let imageURLInDatabase = URL(string: imageString) else{
return}
let data = NSData(contentsOf: imageURLInDatabase)
不能为零
编辑2:
中的内容values["Image"]
答案 0 :(得分:4)
问题是URL字符串末尾的额外引号。试试这个:
numbers = [float(i) for i in user_input.split(','))
你会得到let s = "https://firebasestorage.googleapis.com/v0/b/blackjack-ef580.appspot.com/o/profiles_images%2FdwMGR8sKMvYauf6uQDtyop18cwy1.jpg?alt=media&token=5df48794-d3fd-4e5c-a72c-9928a8a43c4e\""
let url = URL(string:s)
。
答案 1 :(得分:3)
问题不在于values["Image"]
是nil
。问题是values["Image"]
不是值URL字符串。
确保正确编码网址中的空格和其他特殊字符。
作为旁注,请勿使用NSData
,请使用Data
。
答案 2 :(得分:0)
根据您的追踪,问题不是value["Image"]
是nil
。如果是这种情况,你就会崩溃而不是叫return
。您的问题是无论value["Image"]
的价值如何,它都不是有效的URL
。没有看到价值,很难确切地知道它有什么问题,但它在某种程度上是畸形的。
答案 3 :(得分:-1)
这是因为字典values
不包含密钥Image
。所以values['Image']
将返回nil,强制展开nil会使应用程序崩溃。
尝试使用guard else语句打开它
guard let imageValue = values["Image"] as? String else {
//imageValue is nil here, handle accordingly
return
}
guard let imageURLInDatabase = URL(string: imageValue) else {
//imageURLInDatabase is nil here, handle accordingly
return
}
let data = NSData(contentsOf: imageURLInDatabase)
修改1:
使用更新后的问题和断点图像,值[“Image”]不为空,imageURLInDatabase为零,因为它转到了其他情况。
原因可能是值[“Image”]可能没有返回有效的URL,因为URL(字符串:..)失败。
编辑2:
检查您刚刚分享的字符串网址
"https://firebasestorage.googleapis.com/v0/b/blackjack-ef580.appspot.com/o/profiles_images%2FdwMGR8sKMvYauf6uQDtyop18cwy1.jpg?alt=media&token=5df48794-d3fd-4e5c-a72c-9928a8a43c4e\""
最后还有一个额外的引用!