You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Swift数组中访问CodigosAutorizacion结构体的属性?

解决Swift数组下标和属性访问的错误问题

咱们先拆解一下你遇到的两个错误,其实根源都是同一个:codes数组的类型没有明确指定,导致Swift无法正确推断出数组元素的类型。

错误原因分析

  1. No exact matches in call to subscript:如果你只是用var codes = []声明数组,Swift会默认把它推断成[Any]类型(任意元素的数组)。当你用codes[indexPath.row]访问时,Swift不确定返回的元素是什么类型,所以找不到精确匹配的下标调用。
  2. Reference to member 'instancia' cannot be resolved without a contextual type:因为codes[indexPath.row]返回的是Any类型,而Any并没有instancia这个属性,所以编译器无法解析这个成员访问。

解决方案步骤

1. 明确声明数组类型

首先,把codes数组明确声明为CodigosAutorizacion类型的数组,这样Swift就知道数组里存的都是这个类型的对象:

// 两种写法都可以,选你习惯的就行
var codes: [CodigosAutorizacion] = []
// 或者
var codes = [CodigosAutorizacion]()

2. 修正循环逻辑(隐藏的bug)

另外,你的循环代码里还有一个容易忽略的问题:你遍历的是0..<array.count,但每次创建CodigosAutorizacion时都用的是同一个validateData,这会导致数组里所有元素都是完全一样的对象!你应该遍历array里的每个元素,用当前元素来初始化对象:

for data in array {
    let codeItem = CodigosAutorizacion(
        code: data["codigo"] as? String,
        codeCancel: data["cancela_codigo"] as? String,
        codeSite: data["cod_sitio"] as? String,
        codeSiteCancel: data["cancela_cod_sitio"] as? String,
        instance: data["instancia"] as? String
    )
    codes.append(codeItem)
}

(这里把变量名从codeArray改成了codeItem,因为它是单个对象,不是数组,更符合语义)

3. 正常访问数组元素属性

现在codes数组的类型是[CodigosAutorizacion],codes[indexPath.row]会直接返回CodigosAutorizacion类型的对象,你可以正常访问它的instance属性了:

codeCell.codigoSitio.text = codes[indexPath.row].instance

这样修改后,两个错误都会消失,你也能正常用这个数组来生成表格啦。

内容的提问来源于stack exchange,提问作者Angel Davila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:44:32