【发布时间】:2022-01-28 00:48:32
【问题描述】:
首先,我有一个这样的结构:
struct CodigosAutorizacion {
var codigo: String?
var codigoCancel: String?
var codigoSitio: String?
var codigoCancelsitio: String?
var instancia: String?
init(
code : String? = nil,
codeCancel: String? = nil,
codeSite: String? = nil,
codeSiteCancel: String? = nil,
instance: String? = nil
){
self.codigo = code
self.codigoCancel = codeCancel
self.codigoSitio = codeSite
self.codigoCancelsitio = codeSiteCancel
self.instancia = instance
}
}
这个结构值是从网络服务中填充的,然后存储在一个数组中,如下所示:
let codeArray = [
CodigosAutorizacion(
code: validateData!["codigo"] as? String,
codeCancel: validateData!["cancela_codigo"] as? String,
codeSite: validateData!["cod_sitio"] as? String,
codeSiteCancel: validateData!["cancela_cod_sitio"] as? String,
instance: validateData!["instancia"] as? String)
]
codes?.append(codeArray)
现在,当我尝试将这些值赋予表格单元格内的标签时(我使用自定义单元格),我无法访问要赋予标签的特定结构值。 我所说的示例
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let codeCell: DetalleCodigoCell = tableView.dequeueReusableCell(withIdentifier: "CodigoCell", for: indexPath) as! DetalleCodigoCell
codeCell.CodigoNombre.adjustsFontSizeToFitWidth = true
codeCell.codigoNombre.text = codes![indexPath.row].instancia
codeCell.codigoSitio.text = codes![indexPath.row].codigoSitio
codeCell.codigoCancelSitio.text = codes![indexPath.row].codigoCancelsitio
codeCell.codigoInstancia.text = codes![indexPath.row].codigo
codeCell.codigoCancelInstancia.text = codes![indexPath.row].codigoCancel
return codeCell
}
我在行中收到以下错误 'codes![indexPath.row].instancia' 例如
错误:
-在调用下标时没有完全匹配
-如果没有上下文类型,则无法解析对成员“instancia”的引用
我尝试直接从“codeArray”访问,而不是将其存储在中间全局数组“codes”中并访问,但它也不起作用,因为我知道这是可能的,但我不知道为什么我收到了那个错误。 有什么解决办法吗? 提前致谢。
这是我正在尝试做的参考: How to pass specific value to a cell when that cell is selected?
【问题讨论】:
-
根据第一个sn-p
codes是[[CodigosAutorizacion]]是一个二维数组。但是在cellForRow中,您将其视为[CodigosAutorizacion],这是一个无法工作的一维数组。 -
@vadian 因此,将结构直接传递给数组,以将其保持为一维数组。而不是附加将结构存储到数组'codes'的codeArray,只需将结构保存在'codes'中,然后在
cellForRow访问'codes'。是这个意思吗? -
顺便说一句,尽量不要在可选项上使用
!或?。最好通过有效性测试来解开您的变量,并在失败时做一些有用的事情。请记住,!表示“如果这是 nil,则崩溃”,?表示“如果这是 nil,则不执行任何操作”。因此,除非这些是您真正想要的,否则测试会更好。 -
@PhillipMills 谢谢,我会记住这一点
-
cellForRow中的代码在codes为[CodigosAutorizacion]时有效。为什么它是可选的?数组应该被声明为非可选的空。
标签: ios arrays swift xcode struct