为啥 tableviewcell 返回一个 optional("")
Posted
技术标签:
【中文标题】为啥 tableviewcell 返回一个 optional("")【英文标题】:Why tableviewcell is returning an optional("")为什么 tableviewcell 返回一个 optional("") 【发布时间】:2019-04-13 16:39:15 【问题描述】:我正在尝试将来自 api 的请求结果显示到单元格中。我能够发出请求并解析数据。但是当我尝试在单元格中显示内容并打印单元格值时,结果是可选的(“”)。有人能解释一下为什么吗?
cell.restaurantNameLabel.text = apiDataModel.restaurantName
apiDataModel.restaurantName
不是nil
任何帮助表示赞赏!谢谢
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DiscoverTableViewCell
cell.discoverImage.image = UIImage(named: "Detail")
cell.restaurantNameLabel.text = apiDataModel.restaurantName
return cell
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let currentCell = tableView.cellForRow(at: indexPath) as! DiscoverTableViewCell
print(currentCell.restaurantNameLabel.text)
func search(url: String, parameters : [String:String])
let headers: HTTPHeaders = ["Authorization":"Bearer \(apiKey)"]
Alamofire.request(url, method: .get, parameters: parameters, headers: headers ) .responseJSON
URLResponse in
//print(URLResponse)
if URLResponse.result.isSuccess
let yelpDataJSON = JSON(URLResponse.value!)
self.updateYelpData(Json: yelpDataJSON)
print("\(yelpDataJSON)")
else
print("error")
func updateYelpData(Json : JSON)
if let nameJSON = Json["businesses"][0]["name"].string
apiDataModel.restaurantName = nameJSON
print(apiDataModel.restaurantName)
apiDataModel.restaurantLocation = Json["businesses"][0]["location"]["display_address"][0].stringValue
else
print("error")
【问题讨论】:
是的。我将它用于诊断目的。我不明白为什么我的标签无法显示结果等...谢谢 【参考方案1】:你没有向我们展示你在哪里调用了search
,但request
是一个异步方法,但你永远不会在updateYelpData
内的表视图上调用reloadData
。因此,表格视图的初始填充发生在 Alamofire 检索和解析数据之前。
如果你在updateYelpData
里面放一个tableView.reloadData()
,表格视图会在被Alamofire检索到后用真实数据更新。
【讨论】:
异步任务对于新手来说总是一个错过的问题 是的,这就是我向 Vangola 指出的原因,因为这是问题的根源。 谢谢。它正在工作。我不知道我必须调用 tableView.reloadData() 。谢谢你 。需要了解异步方法。【参考方案2】:似乎apiDataModel.restaurantName
是nil
/ ""
并将其设置为标签文本将使其成为""
之后需要重新加载表格
self.updateYelpData(Json: yelpDataJSON)
self.tableView.reloadData()
并确保你有一个有效的结果
【讨论】:
谢谢。它正在工作。我不知道我必须调用 tableView.reloadData() 。以上是关于为啥 tableviewcell 返回一个 optional("")的主要内容,如果未能解决你的问题,请参考以下文章
为啥返回 ViewController 时 tableView Cell 会被选中?
生成返回字符串的函数时,为啥 wasm-opt 在 wasm-pack 构建中失败?