【问题标题】:How to set a specific value from a struct to a custom cell?如何将结构中的特定值设置为自定义单元格?
【发布时间】: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


【解决方案1】:

乐于助人。看来问题是关于Optionals

首先:将codes 调整为输入[CodigosAutorizacion]

然后:在cellForRowAt 中执行var x = optional ?? nonOptional 之类的操作

示例:

codeCell.codigoNombre.text = codes?[indexPath.row].instancia ?? "0"

参考:https://stackoverflow.com/a/25195633/17771995

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多