【问题标题】:Trying to loop over an array of Custom class objects尝试遍历自定义类对象数组
【发布时间】:2019-02-16 11:08:27
【问题描述】:

我有一个如下所示的数据模块:

class CurrencyModel {
    var currencyName = ""
    var currencyCode = ""
}

我正在尝试遍历所有这些对象并创建一个 currencyNames 数组。

这是我的尝试:

var currencies = [CurrencyModel]()

override func viewWillAppear(_ animated: Bool) {
    for names in currencies{
        let name = currencies[names].currencyName
        namesArray.append(name)

        print(namesArray)
    }
}

我不断收到此错误:

不能用“CurrencyModel”类型的索引为“[CurrencyModel]”类型的值下标

【问题讨论】:

  • 你为什么不专注于你的former thread
  • 主要是因为这不是同一个问题。它是相关的,但我正在尝试实现 sectionIndexTitles 函数的另一个问题。在这里,我问的是如何循环自定义对象。之前有人问我每个问题只问一个主题。所以我就是这么做的。
  • 两者并不完全相同,但这是前者的很大一部分。的确,您应该每个问题问一个主题。但是分离过于密切相关的事物可能会使您难以为您的特定问题获得最佳解决方案。您可以等到有人告诉您您之前的问题包含多个主题。
  • 下次我会记住这一点。我以为我在做正确的事。对不起。
  • 不用担心。有时很难判断什么是正确的方法。我相信你下次可以做得更好。希望您的问题能尽快得到解决。

标签: arrays swift object for-loop


【解决方案1】:

问题来了

let name = currencies[names].currencyName

因为 currencies 是一个数组 ([CurrencyModel]) 来下标它需要一个像 currencies[0] 这样的整数值,但你发送 names 而不是 CurrencyModel 类型

你需要

var namesArray = [String]()
override func viewWillAppear(_ animated: Bool) {
  super.viewWillAppear(animated)
  namesArray = currencies.map{$0.currencyName}
}

currencies.forEach { namesArray.append($0.currencyName)}

for names in currencies {  // not perferred 
    namesArray.append(names.currencyName)
}

//

编辑:然后使用

namesArray = Array(currencies.map{$0.currencyName}.prefix(1)) 

【讨论】:

  • 如果我想做这样的事情怎么办? namesArray = currency.map{$0.currencyName}.prefix(1)
【解决方案2】:

currencies[CurrencyModel]CurrencyModel 的数组)。

循环for names in currencies 迭代该数组。 names 将是数组中的每个 CurrencyModel 对象。

所以行:

let name = currencies[names].currencyName

应该是:

let name = names.currencyName

当然整个for循环可以换成一行:

let namesArray = currencies.map { $0.currencyName }

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 2018-05-11
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多