arrays - 更新通过引用传递的数组中的项目

标签 arrays swift swift2 pass-by-reference inout

更新数组中的项目最简单/正确的方法是什么?我希望调用者也有更新的数组。所以:

static func updateItem(updatedItem: Item, inout items: [Item]) -> Bool {
        var item = items.filter{ $0.id == updatedItem.id }.first
        if item != nil {
            item = updatedItem
            return true
        }

        return false
    }

我希望调用者拥有更新的项目(带有更新的项目)。我认为上面代码的问题在于它只更新了局部变量项。实际更新 items 数组中相关项目的最佳方法是什么?

最佳答案

就像超人穿上他的紧身衣一样——一次一条腿。循环传入的 inout 数组并替换 id 匹配的任何项目:

func updateItem(updatedItem: Item, items: inout [Item]) -> Bool {
    var result = false
    for ix in items.indices {
        if items[ix].id == updatedItem.id {
            items[ix] = updatedItem
            result = true
        }
    }
    return result
}

请注意,这是 Swift 3 语法,其中 inout 位于类型之前,而不是标签。

您可以使用 map 来更“快速”地编写它:

func updateItem(updatedItem: Item, items: inout [Item]) {
    items = items.map {
        $0.id == updatedItem.id ? updatedItem : $0
    }
}

...但最终结果是一样的。

关于arrays - 更新通过引用传递的数组中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41351546/

相关文章:

arrays - 无法对二维数组的列进行 slice "cannot use Sudoku[0:9][0] (type [9]int) as type []int in assignment"

ios - 如何在 Parse 中同步 2 个异步提取?

ios - Firebase 和 Alamofire Url TableViewCell 图像加载问题 Swift 4

ios - Firebase 桥接 header 不起作用

swift - Swift 2.1.1 中的获取请求

java - 打印格式化数组

javascript - 基于第 n 个元素合并数组的有效方法是什么?

Swift - 从另一个 UITableViewCell 访问 UITableViewCell

java - 使用 10 个并行线程查找数组中的最大值

ios firebase 用户等于 nil