Как изменить значение переменной Mirror? - PullRequest
0 голосов
/ 25 июня 2018

Есть класс, в котором есть поля, я хочу, чтобы Swift Reflection назвал Зеркало получить все поля и изменить их на новое значение, я могу получить все дочерние элементы класса имя и значение

let m = Mirror(reflecting: self)
   for item in m.children {
       print("\(item.name) \(item.value)")
}

но нельзя изменить значение переменной:

let m = Mirror(reflecting: self)
   for item in m.children {
       item.value = "new Value"
}

и выдать ошибку, поскольку поле является неизменным:

Невозможно присвоить свойству: 'item' - это константа 'let'

есть ли способ изменить значение на Mirror is Swift?

Хотя у Java есть возможность для этой работы Отражение

ОБНОВЛЕНИЕ

Я использую var в цикле и могу изменять значение, но поле значения не изменяется в классе.

let m = Mirror(reflecting: self)
   for var item in m.children {
    item.value = "new Value"
}

1 Ответ

0 голосов
/ 25 июня 2018

Я нашел решение. Я думаю, что это помогает вам

func toJSON() throws -> Any? {
    let mirror = Mirror(reflecting: self)

    guard !mirror.children.isEmpty else { return self }

    var result: [String: Any] = [:]

    for child in mirror.children {
        if let value = child.value as? JSONSerializable {
            if let key = child.label {
                result[key] = try value.toJSON()
            } else {
                throw CouldNotSerializeError.undefinedKey(source: self, type: String(describing: type(of: child.value)))
            }
        } else {
            throw CouldNotSerializeError.noImplementation(source: self, type: String(describing: type(of: child.value)))
        }
    }

    return result
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...