无法下标'[(String)]类型的值?'索引类型为'Int'

时间:2015-07-15 05:39:26

标签: ios swift uitableview nsdictionary

我正在尝试显示类别的tableview,每个类别都有自己的类别集。

例如,主要类别是食品,娱乐,娱乐,在餐厅的食品部分,墨西哥食品,亚洲食品等显示在该部分下。

但是,我遇到了这个错误:

  

不能下标'[(String)]类型的值?'索引类型为'Int'

这是我的代码:

var categoryDictionary = [String:[String]]();
var categoriesList = ["Food", "Entertainment", "Recreation", "Shopping", "Transport", "Post Office"]
var foodCategories = [String]();
var entertainmentCategories = [String]();
var recreationCategories = [String]();
var shoppingCategories = [String]();
var transportCategories = [String]();
var lodgingCategories = [String]();
var librariesCategories = [String]();
var banksCategories = [String]();
var postOfficeCategories = [String]();

这里只是一个附加到数组并将“Food”的键值添加到foodCategory数组的示例

func setupCategoryFood() {
    var asianFood = "Asian Food"
    var mexicanFood = "Mexican Food"
    var fastFood = "Fast Food"
    var MiddleEasternFood = "Middle Eastern Food"

    foodCategories.append(asianFood);
    foodCategories.append(mexicanFood);
    foodCategories.append(fastFood);
    foodCategories.append(MiddleEasternFood);

    categoryDictionary["Food"] = foodCategories;
}

然后......

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

    let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("myCell") as! UITableViewCell;

    var sectionTitle = categoriesList[indexPath.section]
    var sectionArray = categoryDictionary[sectionTitle];
    var itemInArray = sectionArray[indexPath.row];

    return cell
}

当我尝试将变量设置为等于给定 indexpath.row的数组内部的项时,我收到错误:

  

'不能下标'[(String)]类型的值?'索引类型为'Int'

我真的很困惑,为什么这不起作用,所以任何帮助都会很棒。

2 个答案:

答案 0 :(得分:5)

您的sectionArray是可选的,因此您可以通过以下方式访问该对象:

var itemInArray = sectionArray?[indexPath.row]

你的输出将是:

Optional("Asian Food")
Optional("Mexican Food")
Optional("Fast Food")

如果您不想要可选项,那么您可以这样解开它:

var itemInArray = sectionArray![indexPath.row]

你的输出将是:

Asian Food
Mexican Food
Fast Food

答案 1 :(得分:0)

尝试下标可选数组时出错。最好在访问之前检查数组是否为nil。

if let sectionArray = sectionArray {
    itemInArray = sectionArray[indexPath.row] 
}

或者如果在itemInArray中设置了nil值,则可以使用

itemInArray = sectionArray?[indexPath.row]