不能为“[(String)] 类型的值下标?”具有“Int”类型的索引

Posted

技术标签:

【中文标题】不能为“[(String)] 类型的值下标?”具有“Int”类型的索引【英文标题】:Cannot subscript a value of type '[(String)]?' with an index of type 'Int' 【发布时间】:2015-07-15 05:39:26 【问题描述】:

我正在尝试显示类别的表格视图,每个类别都有自己的类别集。

例如,主要类别是食物、娱乐、消遣,并且在 tableview 的食物部分中,墨西哥食物、亚洲食物等显示在该部分下。

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

这是我的代码:

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”类型的索引

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

【问题讨论】:

【参考方案1】:

您的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

【讨论】:

【参考方案2】:

尝试下标可选数组时出现错误。最好在访问数组之前检查数组不为零。

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

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

itemInArray = sectionArray?[indexPath.row] 

【讨论】:

以上是关于不能为“[(String)] 类型的值下标?”具有“Int”类型的索引的主要内容,如果未能解决你的问题,请参考以下文章

无法使用“Int”类型的索引为“[String : String]”类型的值下标

无法使用 [NSIndexPath] 类型的索引为 [String] 类型的值下标 - prepareForSegue

UISearchDisplayController 错误 - 斯威夫特

为啥不能为具有 date=max(date) 的最大日期的每个代码选择记录?

为啥我不能为具有相同名称的命名函数表达式中的变量赋值?

当列具有默认约束时,SQL Server 2012获取列不能为空。