Вы можете искать массив кортежей, используя firstIndex(where:)
, чтобы найти индекс первого элемента, который соответствует вашему условию. В вашем случае вы ищете совпадение с конкретным id
, поэтому вы должны использовать закрытие, такое как { $0.id == "2" }
.
Как только вы найдете этот индекс, вы можете использовать его для обновления кортежа внутримассив.
Пример:
var info: [(id: String, name: String, years: Int, city: String)] = [
("1", "Fred", 35, "Bedrock"),
("2", "Wilma", 32, "Bedrock")
]
if let idx = info.firstIndex(where: { $0.id == "2" }) {
info[idx].city = "Boulder"
}
print(info)
Выход
[(id: "1", name: "Fred", years: 35, city: "Bedrock"),
(id: "2", name: "Wilma", years: 32, city: "Boulder")]
Используйте struct
вместо кортежа
Тем не менее, вам действительно следует использовать struct
здесь для хранения ваших значений. Кортежи в Swift действительно предназначены для временного использования (например, для возврата нескольких значений из функции), поэтому определение struct
для хранения ваших значений является предпочтительным:
struct Record {
var id: String
var name: String
var years: Int
var city: String
}
var info: [Record] = [
.init(id: "1", name: "Fred", years: 35, city: "Bedrock"),
.init(id: "2", name: "Wilma", years: 32, city: "Bedrock")
]
Код поиска останется прежним.