Swift 2 中的反射

2024-03-07

我有一个类用户:

import UIKit
import ObjectMapper


class User: NSObject, CustomStringConvertible, Mappable {

    var FirstName: NSString! ;
    var LastName: NSString! ;


    required init?(_ map: Map){

    }


    func mapping(map: Map) {

        FirstName <- map["FirstName"]
        LastName <- map["LastName"]

    }


    override var description:String {
        var s:String=""

  //USE REFLECTION TO GET NAME AND VALUE OF DATA MEMBERS      
        for var index=1; index<reflect(self).count; ++index {
            s += (reflect(self)[index].0 + ": "+reflect(self)[index].1.summary+"\t")
        }

        return s
    }
}

在 swift 1.2 中,我使用 Reflect() 方法来获取所有数据成员及其名称和值的数组。

现在,在我更新到 swift 2 后,我收到以下错误:

“reflect”不可用:调用“Mirror(reflecting:)”初始值设定项

经过一些试验,我能够通过以下方式获取数据成员的数量:Int(Mirror(reflecting: self).children.count),但是我仍然无法获取成员名称及其值。

我研究了以下资源:

  1. https://netguru.co/blog/reflection-swift https://netguru.co/blog/reflection-swift
  2. http://nshipster.com/mirrortype/ http://nshipster.com/mirrortype/

UPDATE我在这里找到了答案:https://stackoverflow.com/a/32846514/4959077 https://stackoverflow.com/a/32846514/4959077。但这并没有告诉我们如何找出反射值的类型。如果该值是 int 并且我们将其解析为 String 那么它会给出错误。


您可以按如下方式访问反射属性“标签”的名称、值和类型:

let mirror = Mirror(reflecting: SomeObject)

var dictionary = [String: Any]() 
for child in mirror.children {
    guard let key = child.label else { continue }
    let value: Any = child.value

    dictionary[key] = value

    switch value {
    case is Int: print("integer = \(anyValue)")
    case is String: print("string = \(anyValue)")
    default: print("other type = \(anyValue)")
    }

    switch value {
    case let i as Int: print("• integer = \(i)")
    case let s as String: print("• string = \(s)")
    default: print("• other type = \(anyValue)")
    }

    if let i = value as? Int {
        print("•• integer = \(i)")
    }
}

注意:根据后续问题,显示了确定反射值类型的三种方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 2 中的反射 的相关文章

随机推荐