【问题标题】:how to add element in the array which select by switch case如何在通过switch case选择的数组中添加元素
【发布时间】:2020-08-14 08:44:09
【问题描述】:

我想调用函数并给定一个类型,让不同的数组附加来自 API 的数据。我已经打印出计数,但 customerViewData 仍然有 0 个元素,而 selectCustomerListViewData 有 10 个元素。似乎 selectCustomerListViewData = customerViewData 不像我想的那样工作。对于这种情况,如何在正确的数组中添加元素?我知道我可以创建 3 个函数来解决这个问题。

class CustomerListViewData{
  var customer_id: String = ""
  var name: String = ""
  var image: String = ""
  var birthday: String = ""
  var age: String = ""
  var gender: String = ""
  var mobile: String = ""
  var identityNumber: String = ""
  var isSelected: Bool = false
  var isChanged: Bool = false
}
    func getCustomerViewData(type: String)->[CustomerListViewData]{
        var selectCustomerListViewData: [CustomerListViewData]
        var selectCustomerRawData: GetCustomerResponse?
        switch type {
            case "1":
                selectCustomerListViewData = customerViewData
                selectCustomerRawData = customerRawData
                break
            
            case "2":
                selectCustomerListViewData = searchCustomerViewData
                selectCustomerRawData = searchCustomerRawData
                break
            
            default:
                selectCustomerListViewData = notificationCustomerViewData
                selectCustomerRawData = notificationCustomerRawData
                break
      }
      if let customerList = selectCustomerRawData?.customerList{
        for each in customerList{
            let customer = CustomerListViewData(each.customer_id, each.name, each.image ?? "", each.birthday, calculateAge(birthday: each.birthday), each.gender, each.spikeStatus, each.mobile ?? "", each.identityNumber ?? "")
            selectCustomerListViewData.append(customer)
           }
       }
       print("\(customerViewData.count)")
       print("\(selectCustomerListViewData.count)")
       return selectCustomerListViewData
   }

【问题讨论】:

  • 不清楚您的问题是什么,因为我们不知道您使用的所有这些属性是什么,而且问题也不清楚。您说 customerListViewData.count 是 0 但您没有打印它,而是打印 customerViewData.count 以及 customerListViewData 是什么,因为它不是您发布的代码的一部分。澄清您的问题并可能添加一些测试数据,以便我们拥有可重现的东西
  • 不相关,但这是 Swift:switch 案例中没有 break 语句(除非立即退出 default 案例)
  • @JoakimDanielson 抱歉,有错字。
  • selectCustomerListViewData 从 selectCustomerRawData 获取它的数据,因此无法清楚它是如何相关的,或者 customerViewData 为空的问题。这个问题缺少很多信息。
  • 我添加了一个开关盒,并在我的函数末尾使用“+= selectCustomerListViewData”到实际数组。它解决了我的问题!

标签: arrays swift switch-statement


【解决方案1】:

您的问题是数组是值类型,而不是引用类型。您需要将数据附加到要添加值的实际数组中。

我会把你的方法分成两种方法:

func processResponse(ofType type: String) {
    switch type {
    case "1":
        customerViewData += extractList(from: customerRawData)
    case "2":
        searchCustomerViewData += extractList(from: searchCustomerRawData)
    default:
        notificationCustomerViewData += extractList(from: notificationCustomerRawData)
    }
}

func extractList(from response: GetCustomerResponse?) -> [CustomerListViewData] {
    guard let response = response else { return [] }
    return response.customerList.map { customer in
        return CustomerListViewData(customer.customer_id, customer.name, /* ... */)
    }
}

【讨论】:

  • 感谢您的评论。我添加了一个开关盒并在实际数组中使用“+=”。谢谢兄弟。
  • 我还有一个问题。如何识别数组是值类型还是引用类型?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 2019-08-10
  • 2022-01-12
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
相关资源
最近更新 更多