编辑数组中项目的最佳方法

时间:2018-01-13 01:41:26

标签: arrays swift swift4

我有一个自定义类的数组,我想对其中一个项目进行更改。

var mainArray = [MainOrder]()

//Now imagine that mainArray has a bunch of different items in it.  

struct MainOrder:Codable {
    var time:Date?
    var order_id:String?
    var side:String?
}

最好的方法是什么?现在我找到索引然后我将它移动到一个新变量然后我从数组中删除该项目,然后再次添加回来,如下所示。但我相信这是更好的方法。

if let tempIndex = self.mainArray.index(where: {$0.side == "left"}) {
    var tempVar = self.mainArray[tempIndex]
    tempVar.time = Date()
    self.mainArray.remove(at: tempIndex)
    self.mainArray.insert(tempVar, at: tempIndex)
}

2 个答案:

答案 0 :(得分:1)

您只需要以下内容:

if let tempIndex = self.mainArray.index(where: {$0.side == "left"}) {
    mainArray[tempIndex].time = Date()
}

这是一个完整的例子,证明了这一点:

struct MainOrder:Codable,CustomStringConvertible {
    var time:Date?
    var order_id:String?
    var side:String?

    var description: String {
        return "time: \(time), order_id: \(order_id), side: \(side)"
    }
}

var mainArray = [MainOrder]()

mainArray.append(MainOrder(time: nil, order_id: "hi", side: "left"))
print(mainArray)

if let tempIndex = self.mainArray.index(where: {$0.side == "left"}) {
    mainArray[tempIndex].time = Date()
}
print(mainArray)

输出:

  

[时间:零,order_id:可选(" hi"),side:可选("左")]
  [时间:可选(2018-01-13 01:59:06 +0000),order_id:可选(" hi"),side:可选("左")]

如果可以保证数组中始终存在具有匹配side值的对象,则可以将此全部强制转换为一行:

mainArray[mainArray.index(where: { $0.side == "left" })!].time = Date()

但如果您的假设错误,这将会崩溃。安全并使用if let

答案 1 :(得分:0)

将其声明为类,因此它将是引用类型

 class MainOrder:NSObject,Codable {
     var time:Date?
     var order_id:String?
     var side:String?
 }

直接编辑项目

 var tempVar = self.mainArray[tempIndex]

 tempVar.time = Date()