【问题标题】:How to update a specific property value of all elements in array using Swift如何使用 Swift 更新数组中所有元素的特定属性值
【发布时间】:2020-01-27 06:19:03
【问题描述】:

假设我已经有一个ViewHolder 数组,即viewHolderList: [ViewHolder]。 我希望所有 isMarried 元素字段在一行中为“false”而不循环。

struct ViewHolder {
    var name: String?
    var age: Int?
    var isMarried: Bool = true
}

【问题讨论】:

  • 您如何期望在不迭代所有元素的情况下对所有元素进行随机化?顺便说一句,您应该将所有属性声明为非可选和常量。仅当属性可能为 nil 时才将其声明为可选。
  • @LeoDabus ,我目前无法正常使用 Array 的“filter”和“map”等原生方法。
  • 你试过Map函数吗?
  • 它们也会循环播放
  • 不知道如何使用地图。上面写着“0 美元”。是不可变的。

标签: arrays swift


【解决方案1】:

您只需要使用forEach 方法迭代您的数组indices 并使用数组索引来更新其元素属性:

struct ViewHolder {
    let name: String
    let age: Int
    var isMarried: Bool
}

var viewHolders: [ViewHolder] = [.init(name: "Steve Jobs", age: 56, isMarried: true),
                                 .init(name: "Tim Cook", age: 59, isMarried: true)]


viewHolders.indices.forEach {
    viewHolders[$0].isMarried = false
}

viewHolders  // [{name "Steve Jobs", age 56, isMarried false}, {name "Tim Cook", age 59, isMarried false}]

您还可以扩展 MutableCollection 并创建一个变异方法来映射集合元素的特定属性,如下所示:

extension MutableCollection {
    mutating func mapProperty<T>(_ keyPath: WritableKeyPath<Element, T>, _ value: T) {
        indices.forEach { self[$0][keyPath: keyPath] = value }
    }
}

用法:

viewHolders.mapProperty(\.isMarried, false)
viewHolders  // [{name "Steve Jobs", age 56, isMarried false}, {name "Tim Cook", age 59, isMarried false}]

【讨论】:

  • 非常有帮助,谢谢!
  • @SandeepMaurya 更新了帖子
猜你喜欢
  • 2022-11-02
  • 1970-01-01
  • 2018-05-19
  • 2014-01-31
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多