无法将类型“ [String]”的值分配给类型“ String?”

时间:2019-05-21 11:54:37

标签: ios arrays swift

我无法在indexPath的tableView委托方法cellForRow中调用数组。它给出了错误信息:

  

不能将字符串类型的值分配给typeString吗?

import UIKit

struct cellData {
    var open = Bool()
    var currentRides = [String]()
    var RequestedRides = [String]()
    var sectionData = [String]()
}

class RideResultViewController: ContentViewController,  UITableViewDelegate, UITableViewDataSource {
    let currentRidesArray = ["1", "2", "3"]
    let RequestedRidesArray = ["A", "B", "C"]

    var tableViewData = [cellData]()

    @IBAction func segmentedValueChanged(_ sender: Any) {
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        //Expandable cell initailization
        tableViewData = [cellData(open: false, currentRides: currentRidesArray, RequestedRides: RequestedRidesArray, sectionData: ["cell1", "cell2", "cell3"])]
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.row == 0 {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") else {return UITableViewCell()}
        if segmentedControl.selectedSegmentIndex == 0 {
            cell.textLabel?.text =   tableViewData[indexPath.section].currentRides
        } else if segmentedControl.selectedSegmentIndex == 1 {
            cell.textLabel?.text =    RequestedRidesArray[indexPath.row]
        }

        return cell
    } else {
        guard let cell =     tableView.dequeueReusableCell(withIdentifier: "cell") else {return UITableViewCell()}
        if segmentedControl.selectedSegmentIndex == 0 {
            cell.textLabel?.text = tableViewData[indexPath.section].sectionData[indexPath.row]
        } else if segmentedControl.selectedSegmentIndex == 1 {
            cell.textLabel?.text =    tableViewData[indexPath.section].sectionData[indexPath.row]
        }

        return cell
    }
}

代码未构建。我绑在方括号中,但它仍然给出相同的错误。

2 个答案:

答案 0 :(得分:2)

因为这是[String]字符串数组

将此行更改为

cell.textLabel?.text =   tableViewData[indexPath.section].currentRides

此行

cell.textLabel?.text =   tableViewData[indexPath.section].currentRides[indexPath.row]

答案 1 :(得分:2)

错误是自我解释。.

  

不能将类型为[String]的值分配为类型为'String?'

这意味着您正在将字符串数组(即[String])分配给不允许的字符串类型。

设置cell.textLabel?.text = ...时,请确保分配的是String type而不是[String] type