NSIndexPath?在SWIFT中没有成员名“ROW”错误

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我正在用SWIFT语言和方法创建一个UITableViewController

override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell?

我知道这个错误

NSIndexPath?在SWIFT中没有成员名“ROW”错误

import UIKit

class DPBPlainTableViewController: UITableViewController {

    var dataStore: NSArray = NSArray()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.dataStore = ["one","two","three"]

        println(self.dataStore)
    }


    // #pragma mark - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {

        // Return the number of sections.
        return 1
    }

    override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {

        // Return the number of rows in the section.
        return self.dataStore.count
    }


    override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")

        cell.textLabel.text = self.dataStore[indexPath.row]

        return cell
    }

}

那么,如何使用数组Datastore元素设置cell.text呢?

提问于
用户回答回答于

可以打开可选的indexPath参数if let...:

if let row = indexPath?.row {
    cell.textLabel.text = self.dataStore[row]
}

或者如果你确定indexPath不是nil,可以强制展开!:

cell.textLabel.text = self.dataStore[indexPath!.row]

记住indexPath!对于一个nil值,它将是一个运行时异常,所以最好像第一个示例那样展开它。

用户回答回答于

可以对此调用使用可选的链接语法(将cell.textLabel.text设置为nil如果indexPathnil)):

cell.textLabel.text = indexPath? ? self.dataStore[indexPath!.row] : nil

或者显式地展开它(如果indexPath是nil)):

cell.textLabel.text = self.dataStore[indexPath!.row]

或者用更详细的if let@NateCook建议的语法。

扫码关注云+社区