【问题标题】:Swift 2 Reflection ErrorSwift 2 反射错误
【发布时间】:2016-05-13 02:55:37
【问题描述】:

我查看了一个快速代码,尝试制作一个将对象序列化为 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. 调用中缺少参数标签“reflecting:”
  2. 无法创建带有元素标签的单元素元组

知道这里可能出了什么问题吗?

【问题讨论】:

    标签: reflection swift2 mirror xcode7.3


    【解决方案1】:

    错误:

    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)
    

    【讨论】:

    • 我为您更正了格式。现在由您来描述您更改的什么以及为什么
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 2015-12-08
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      相关资源
      最近更新 更多