【发布时间】:2019-03-06 11:18:22
【问题描述】:
我在 Firestore 中存储了一些字符串和 2 个数组,现在我正在尝试接收它们,但我不知道如何接收它们。好吧,字符串工作正常,但我不知道如何查询数组。我收到错误代码:
线程 1:致命错误:在展开可选值时意外发现 nil
这是我的代码:
//For-loop
for document in QuerySnapshot!.documents
{
self.list.removeAll()
//let document = QuerySnapshot!.documents
let data = document.data()
let data1 = data["Dog"] as? String
let data2 = data["Person"] as? String
let data3 = data["What"] as? String
let data4 = data["Time"] as? String
let data5 = data["Date"] as? String
let data6 = data["Kilometers"] as? String
let data7 = data["Timer"] as? String
let data8 = data["Latitude"] as? Array<Double>
let data9 = data["Longitude"] as? Array<Double>
let txt = listTxt(dog: data1!, person: data2!, action: data3!, time: data4!, date: data5!, kilometers: data6!, timer: data7!, latitude: data8 ?? [], longitude: data9 ?? [])
print(txt)
tempTxt.append(txt)
}
self.list = tempTxt
self.tableView.reloadData()
}
数组存储为Double,重点是将其接收为double,然后再次将其转换为CLLocationCoordinate2D,这样我就可以将坐标用于地图。如果您知道如何解决此问题,请告诉我。 :)
类内:
class listTxt
{
var dog: String
var person: String
var action: String
var time: String
var date: String
var kilometers: String
var timer: String
var latitude: [String]
var longitude: [String]
init(dog: String, person: String, action: String, time: String, date: String, kilometers: String, timer: String, latitude: [String], longitude: [String])
{
self.dog = dog
self.person = person
self.action = action
self.time = time
self.date = date
self.kilometers = kilometers
self.timer = timer
self.latitude = latitude
self.longitude = longitude
}
在历史单元内
class HistoryCell: UITableViewCell
{
@IBOutlet weak var DogName: UILabel!
@IBOutlet weak var Person: UILabel!
@IBOutlet weak var Action: UILabel!
@IBOutlet weak var Date: UILabel!
@IBOutlet weak var Time: UILabel!
@IBOutlet weak var timer: UILabel!
@IBOutlet weak var kilometer: UILabel!
var latitude: [String] = []
var longitude: [String] = []
func setCell(list: listTxt)
{
DogName.text = list.dog
Person.text = list.person
Action.text = list.action
Date.text = list.date
Time.text = list.time
timer.text = list.timer
kilometer.text = list.kilometers
latitude = list.latitude
longitude = list.longitude
}
}
提前致谢。 :)
【问题讨论】:
-
@Saurabh 你的意思是我应该使用“as?String”而不是Double?而不是将其转换为 Int,然后从 int 转换为 Double? :)
-
不,这是行不通的,因为您可能会得到带十进制的字符串值。如果我错了,请纠正我。
-
@Saurabh 是的,从一开始就是 CLLocationCoordinate2D。我将其转换为将数据插入 Firestore
-
好吧,你可能会得到空字符串或 nil 值,如果你尝试将它们强制转换为 Double,将引发错误。所以在转换之前,请检查值是否不为空或 nil。
标签: ios arrays swift google-cloud-firestore