Изменение структуры в составе массива

struct
array

#1

Добрый день. Помогите, найти лучший вариант реализации.
Дано: Массив со структурами. Необходимо внести изменения в конкретную структуру.

Реализация очень топорная, уверен, что есть то чего я не знаю и намного элегантней вариант

import Foundation

struct Person {
    var id: Int
    var name: String
}

var contacts: [Person] = [
    Person(id: 1, name: "Alex"),
    Person(id: 2, name: "Stiv"),
    Person(id: 3, name: "Joy")
]


func renamePerson(id: Int, name: String, array: [Person]) -> [Person] {
    
    var result: [Person] = []
    
    for i in array {
        if i.id == id {
            result.append(Person(id: i.id, name: name))
        } else {
            result.append(i)
        }
    }
    return result
}

contacts = renamePerson(id: 1, name: "Sasha", array: contacts)

#2
func renamePerson(id: Int, name: String) {
    contacts.first(where: { $0.id == id })?.name = name
}

#3

Благодарю, написал вопрос и начал гуглить дополнительно.

Ко всему прочему нужно структуру на класс заменить, иначе не работает.
Теперь пытаюсь понять как вернуть булевое значение об успешном переименовании.

contacts.first(where: { $0.id == id })?.name = name если эту строчку присвоить переменной то xcode автоматически подставляет тип ()?
Если значение не присвоено возвращает nil это единственно правильное решение или есть варианты?!


#4

для использования структур будет так

func renamePerson(id: Int, name: String) {
    if let index = contacts.firstIndex(where: { $0.id == id }) {
        contacts[0].name = name
    }
}

для возвращения Bool

func renamePerson(id: Int, name: String) -> Bool {
    if let index = contacts.firstIndex(where: { $0.id == id }) {
        contacts[0].name = name
        return true
    }

    return false
}

#5

Благодарю, 2 дня парился. Через костыли все делал, теперь код стал намного элегантней, я немного опытней, у Вас карма до небес =)