Ошибка отражения Swift 2

Я просмотрел быстрый код, чтобы попытаться создать функцию отражения, которая сериализует объект в JSON. Проблема в том, что когда я вызываю инициализатор, чтобы получить отражение, он выдает сумасшедшую ошибку.

struct Address {
    var street: String
}

struct Person {
    var name: String = "Dre"
    var age: Int = 33
    var dutch: Bool = false
    var address: Address? = Address(street: "Clark Drive")
}

// Throws an error on the next line
let mirror = Mirror(reflecting: Person) 

Когда я пытаюсь установить значение зеркала в результате инициализации зеркала, я получаю следующие ошибки:

  1. Отсутствует метка аргумента «отражающий:» в вызове
  2. Не удается создать одноэлементный кортеж с меткой элемента

Есть идеи, что здесь может быть не так?


person Dblock247    schedule 13.05.2016    source источник


Ответы (2)


Вам нужно передать экземпляр Person вместо класса Person. Например:

struct Address {
    var street: String
}

struct Person {
    var name: String = "Dre"
    var age: Int = 33
    var dutch: Bool = false
    var address: Address? = Address(street: "Clark Drive")
}

let person = Person()
let mirror = Mirror(reflecting: person)

print(mirror.displayStyle)
for case let (label?, value) in mirror.children {
    print(label, value)
}

Отпечатки:

Optional(Struct)
name Dre
age 33
dutch false
address Optional(Address(street: "Clark Drive"))
Mirror for Bookmark
person paulvs    schedule 13.05.2016

неправильный:

func jediGreet(name: String, ability: String) -> (farewell: String, mayTheForceBeWithYou: String) {
  return ("Good bye, \(name).", " May the \(ability) be with you.")
}

let retValue = jediGreet("old friend", "Force")
println(retValue)
println(retValue.farewell)
println(retValue.mayTheForceBeWithYou)

правильный:

func jediGreet(name: String, ability: String) -> (farewell: String, mayTheForceBeWithYou: String) {
  return ("Good bye, \(name).", " May the \(ability) be with you.")
}

let retValue = jediGreet (name:"old friend",ability: "Force")
print(retValue)
print(retValue.farewell)
print(retValue.mayTheForceBeWithYou)
person Adarsh KC    schedule 03.08.2017
comment
Я исправил форматирование для вас. Теперь вам нужно описать, что вы изменили и почему. - person Daniel Alder; 03.08.2017