无法将“String”类型的值分配给“UILabel”类型
Posted
技术标签:
【中文标题】无法将“String”类型的值分配给“UILabel”类型【英文标题】:Cannot assign value of type 'String' to type '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]
【参考方案1】:
其实你得写
detail.lblName.text = name[indexPath.row]
但这会导致崩溃。将值分配给name
属性
detail.name = name[indexPath.row]
【讨论】:
错误已经消失,但是在从同一行运行代码后detail.lblName.text = name[indexPath.row]
得到一个致命错误“在隐式展开可选值时意外发现 nil”
是的,正如我所说的这会导致崩溃。实例化控制器后,插座尚未连接。
但我连接了插座。
你做了,但是在视图加载之前插座不存在。这就是为什么在viewDidLoad
中声明一个属性并将值分配给标签是正确的方法。以上是关于无法将“String”类型的值分配给“UILabel”类型的主要内容,如果未能解决你的问题,请参考以下文章
无法将 String 类型的值分配给 AnyObject 类型?斯威夫特 3.0
“无法将类型 'String' 的值分配给类型 'AnyObject?'”,Swift 3,Xcode 8 beta 6
如何更正错误“无法将 [NSManagedObject] 类型的值分配给 [String] 类型
无法将“Int”类型的值分配给“String”类型?在 (cellForRowAt) 中使用 Tableview
使用 SwiftUI 从 Cloud Firestore 中的集合“配置文件”中获取数据。无法将类型“[String:Any]”的值分配给类型“UserProfile”