gpt4 book ai didi

ios - 覆盖数组swift ios中的旧对象

转载 作者:行者123 更新时间:2023-11-29 00:52:53 25 4
gpt4 key购买 nike

我有一组自定义对象。为简单起见,假设每个对象都有 3 个属性:idtimestamptext。我现在从我的服务器获取一个 JSON 响应,其中包含数组中对象的更新 text。我需要执行以下操作:

  1. 从我的数组中获取具有给定 id 的对象。
  2. 将对象的 text 设置为更新后的 text,而不更改其任何其他属性。
  3. 用更新后的新对象覆盖旧对象。

我找到了以下扩展,它允许我在我的数组中找到对象。

 extension CollectionType {
func find(@noescape predicate: (Self.Generator.Element) throws -> Bool) rethrows -> Self.Generator.Element? {
return try indexOf(predicate).map({self[$0]})
}
}

然后我使用以下逻辑从数组中获取项目。

let my_object =  questionImageObjects.find({$0.id== myId})

现在我使用 my_object.text = currText 设置文本。

最后一步是用更新的对象覆盖数组中的旧对象。这就是我被困的地方。

最佳答案

扩展find将返回原始结构的副本。无论您对它做什么,原件都不会受到影响。可以通过索引修改:

struct DataModel: CustomStringConvertible {
var id: Int
var timestamp: NSDate
var text: String

init(id: Int, timestamp: NSDate, text: String) {
self.id = id
self.timestamp = timestamp
self.text = text
}

// For debug purposes
var description: String {
get { return "( id = \(id), timestamp = \(timestamp), text = \(text) )" }
}
}

// Initial data
var arr = [
DataModel(id: 1, timestamp: NSDate(), text: "Anakin Skywalker"),
DataModel(id: 2, timestamp: NSDate(), text: "Luke Skywalker")
]

// Now the server returns a JSON that says Anakin has turned to the Dark Side
let jsonString = "{ \"id\": 1, \"text\": \"Darth Vader\" }"
let jsonData = jsonString.dataUsingEncoding(NSUTF8StringEncoding)!
let json = try! NSJSONSerialization.JSONObjectWithData(jsonData, options: [])

// Update the text
if let dict = json as? [String: AnyObject],
let id = dict["id"] as? Int,
let newText = dict["text"] as? String,
let index = (arr.indexOf { $0.id == id }) {

arr[index].text = newText
}

print(arr)

如果这些如果让让您感到困惑,这里有一个分步指南:

  • if let dict 检查 JSON 是否可以转换为字典
  • let id 检查它是否具有 Int 类型的 id
  • let newText 检查它是否具有 String 类型的 text
  • let index 检查数组是否包含具有该 id 的元素

关于ios - 覆盖数组swift ios中的旧对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37933286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com