我在tableView
中有一个这样的数组:
var array: [[String]] = [["Apples", "Bananas", "Oranges"], ["Round", "Curved", "Round"]]
我想在按下单元格时传递单元格的名称。使用标准数组,我可以这样做:
let InfoSegueIdentifier = "ToInfoSegue"
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == InfoSegueIdentifier
{
let destination = segue.destination as! InfoViewController
let arrayIndex = tableView.indexPathForSelectedRow?.row
destination.name = nameArray[arrayIndex!]
}
}
然后在下一个ViewController
(InfoViewController
)
var name = String()
override func viewDidLoad() {
super.viewDidLoad()
nameLabel.text = name
}
错误:“无法将类型'[String]'的值分配为类型'String'”
答案 0 :(得分:0)
更改这部分代码
if segue.identifier == InfoSegueIdentifier
{
let destination = segue.destination as! InfoViewController
let arrayIndex = tableView.indexPathForSelectedRow?.row
destination.name = nameArray[arrayIndex!]
}
收件人
if segue.identifier == InfoSegueIdentifier
{
let destination = segue.destination as! InfoViewController
let arrayIndexRow = tableView.indexPathForSelectedRow?.row
let arrayIndexSection = tableView.indexPathForSelectedRow?.section
destination.name = nameArray[arrayIndexSection!][arrayIndexRow!]
}
尝试并分享结果。
发生崩溃的原因:在您的第一个viewController中,您有 [[String]] ,这是您部分的数据源。现在,当您尝试从此数组中获取对象时,它将返回 [String] ,并且在目标viewController中,您将拥有类型为 String 的对象。并且在将 [String]分配给String 时,会导致类型不匹配的崩溃。因此,以上代码的作用是,首先从 arrayIndexSection 中获取 [String] ,然后从 arrayIndexRow 中获取 String 。 strong>,然后将String对象传递到目的地。
希望它清除。
答案 1 :(得分:0)
您收到此错误,因为您正在将数组传递给第二个视图控制器,并且有一个字符串类型的变量。因此,请像这样替换此方法。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == InfoSegueIdentifier
{
let destination = segue.destination as! InfoViewController
if let indexPath = tableView.indexPathForSelectedRow{
destination.name = nameArray[indexPath.section][indexPath.row]
}
}
}