ios – [AnyObject]?’没有名为’下标’的成员

我正在将核心数据数据库中的对象列表加载到表视图中.
class ScheduleViewController: UITableViewController {

    private var items: [AnyObject]?

    // MARK: - Table view data source
    override func tableView(tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        if let itemCount = items?.count {
            return itemCount
        }
    }

    override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("DayScheduleCell",forIndexPath: indexPath) as DayScheduleCell

        if let act = items[indexPath.row] as Activity {
            if act.client != nil {
                // ...
            }
        }

        return cell
    }
}

在闭包内检索数据,因此我已将items数组声明为可选项,因为它在第一次运行时可能为零.

我收到错误'[AnyObject]?’如果让act = items [indexPath.row]为?,则此行没有名为’subscript’的成员?活动.

我无法弄清楚如何解决这个问题.

解决方法

该数组声明为:
private var items: [AnyObject]?

所以,正如你所说,它是可选的

在swift中,一个可选的是一个枚举,所以它本身就是一个类型 – 作为一个可选的,它可以包含一个nil值或一个包含类型的对象.

您希望将下标应用于数组,而不是应用于可选项,因此在使用它之前,您必须从可选项中解包该数组

items?[indexPath.row]

但这不是全部 – 你还必须使用条件下转:

as? Activity

因为前面的表达式可以评估为nil

所以编写if语句的正确方法

if let act = items?[indexPath.row] as? Activity {

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...