对于快速和面向对象的相当新的所以请耐心等待我。我有一个用于存储数据的小类。
class Coin {
//MARK: Properties
var name: String
var symbol: String
var date: Date
var time: String
init?(name: String, symbol: String, date: Date, time: String) {
self.name = name
self.symbol = symbol
self.date = date
self.time = time
if name.isEmpty {
return nil
}
}
}
通过应用程序,需要更新此数据以显示最新信息。每当我尝试从这些COIN对象加载数据时,我最终会将我加载的数组中的数据加倍。 例如,第一次运行将是10个对象,第二次将是20.
这是在单独的类
中从对象加载数据的方式var coins = [Coin]()
private func loadCoins(CoinName: String, Symbol: String, Date: Date, Time: String) {
guard let coin1 = Coin(name: CoinName, symbol: Symbol, date: Date, time:Time) else {
fatalError("Unable to instantiate coin1")
}
coins += [coin1]
}
有关如何避免重复数据的任何想法?
答案 0 :(得分:0)
每次调用此功能时都使用" + = [coin1]"用于求和数据。如果你想拥有硬币对象数组,只需使用coins.append(硬币)。
答案 1 :(得分:0)
如果您希望Coin
始终拥有一定数量的coins
,请考虑改变现有硬币而不是添加新硬币。例如:
private func updateCoin(at index: Int, name: String, symbol: String, date: Date, time: String) {
guard name.isEmpty == false else {
print("Did not update coin at index \(index) because name was an empty string")
}
coins[index].name = name
coins[index].symbol = symbol
coins[index].date = date
coins[index].time = time
}
如果您不正在修改现有硬币,请考虑将Coin
作为结构并将其所有属性声明为常量。在这种情况下,您需要另一种更新硬币的方法。例如,这适用于不可变的硬币:
private func updateCoin(at index: Int, name: String, symbol: String, date: Date, time: String) {
guard let newCoin = Coin(name: name, symbol: symbol, date: date, time: time) else {
print("Coin could not be initialized with values name: \(name), symbol: \(symbol), date: \(date), time: \(time)")
}
coins[index] = newCoin
}