【问题标题】:Swift - Array filter and then update the main arraySwift - 数组过滤器然后更新主数组
【发布时间】:2018-12-04 02:08:27
【问题描述】:
let cities = [{ "name" : "SF", "id" : 4, "population" : 10, favorite: false},  { "name" : "NY", "id" : 5, "population" : 20, favorite: false}, { "name" : "DC", "id" : 6, "population" : 30, favorite: false}

我有一个数组,如果用户根据人口应用过滤器,我可以使用 filter 方法过滤数组,但它给了我另一个包含过滤数据的数组。在过滤数组中,用户可以收藏城市,当用户删除过滤器时,我需要显示带有收藏指示器的完整城市列表。问题是过滤数组是一个单独的数组,整个数组不知道过滤数组上的属性是否已更改。有没有更简单的方法来处理这一切?我可以过滤主数组而不是创建另一个数组吗?

【问题讨论】:

  • 你的数组类或结构中的东西吗?
  • @Paulw11 结构,但可以根据需要进行更改
  • 只使用类而不是结构。类通过引用传递。
  • 如果你让它们成为类,那么它们是引用对象,因此是可变的;两个数组只会引用一个对象,因此更新favorite 属性将显示在两个数组中,否则您需要更新底层数据模型并从中刷新未过滤的数组
  • 好主意,我可以试试。

标签: ios arrays swift nsarray


【解决方案1】:

创建 JSON 结构

struct City {
    var name : String = ""
    var id : Int = 0
    var population : Int = 0
    var favorite : Bool = false
}

这是城市数组

var cities = [City(name: "SF", id: 4, population: 10, favorite: false),City(name: "NY", id: 5, population: 10, favorite: false),City(name: "DC", id: 6, population: 30, favorite: false)]

比根据人口 == 10 对城市应用过滤器

var filter = cities.filter({ $0.population == 10 })

然后选择其中一个

Ex:- filter[1].favorite = true

并在主数组中更新这个城市的最爱

cities = cities.map { (city) -> City in
    var city = city
    if city.id == filter[1].id {
        city.favorite = true
    }
    return city
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 2016-11-14
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多