【问题标题】:Cannot assign value of type 'String' to type 'UILabel'无法将“String”类型的值分配给“UILabel”类型
【发布时间】:2020-09-12 08:31:59
【问题描述】:

我正在尝试将数据从 tableview 传递到另一个页面(视图控制器),但问题是我从 tableview 收到错误。下面是代码,我已经标记了我得到的错误。

P1ViewController.Swift

class P1ViewController: ViewController,UITableViewDelegate,UITableViewDataSource {
    var name=["Table1","Table2"]
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return name.count
    } 
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell=tableView.dequeueReusableCell(withIdentifier: "cell")
        cell?.textLabel?.text=name[indexPath.row]
        return cell!
    } 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let detail=self.storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as! DetailViewController
        detail.lblName=name[indexPath.row] //This is the error i am getting "Cannot assign value of type 'String' to type 'UILabel'"
        self.navigationController?.pushViewController(detail, animated: true)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

DetailViewController.Swift

class DetailViewController: ViewController {
    @IBOutlet weak var lblName: UILabel!
    var name:String!
    override func viewDidLoad() {
        super.viewDidLoad()
        lblName.text=name
    }
}

【问题讨论】:

  • detail.lblName.text = name[indexPath.row]

标签: swift uitableview tableview viewcontroller


【解决方案1】:

其实你得写

detail.lblName.text = name[indexPath.row] 

但这会导致崩溃。将值分配给name 属性

detail.name = name[indexPath.row] 

【讨论】:

  • 错误已经消失,但是在从同一行运行代码后detail.lblName.text = name[indexPath.row] 得到一个致命错误“在隐式展开可选值时意外发现 nil”
  • 是的,正如我所说的这会导致崩溃。实例化控制器后,插座尚未连接。
  • 但我连接了插座。
  • 你做了,但是在视图加载之前插座不存在。这就是为什么在viewDidLoad 中声明一个属性并将值分配给标签是正确的方法。
猜你喜欢
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多