我有一个类用户:
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
}
}在Swive1.2中,我使用reflect()方法获取所有数据成员的数组及其名称和值。
现在,在我更新到swift 2之后,我将得到以下错误:
“反射”不可用:调用“镜像(反射:)”初始化器
通过一些试验,我能够通过以下方法获得数据成员的数量:Int(Mirror(reflecting: self).children.count),但仍然无法获得成员名及其值。
我研究了下列资源:
更新我在这里找到了一个答案:https://stackoverflow.com/a/32846514/4959077。但这并不能说明如何找出反映值的类型。如果值为int,并将其解析为字符串,则会产生错误。
发布于 2015-11-10 08:21:30
您可以访问反射属性"label“的名称、值和类型如下:
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)")
}
}注:根据后续问题,显示了确定反射值类型的三种方法。
发布于 2016-09-02 10:49:08
我有一个解决方案,它可以在继承自NSObject的任何类中找到属性的名称和类型。
我在StackOverflow在这里上写了一个冗长的解释,我的项目是可用的这里是吉突布,
简而言之,您可以这样做(但确实可以查看代码Github):
public class func getTypesOfProperties(inClass clazz: NSObject.Type) -> Dictionary<String, Any>? {
var count = UInt32()
guard let properties = class_copyPropertyList(clazz, &count) else { return nil }
var types: Dictionary<String, Any> = [:]
for i in 0..<Int(count) {
guard let property: objc_property_t = properties[i], let name = getNameOf(property: property) else { continue }
let type = getTypeOf(property: property)
types[name] = type
}
free(properties)
return types
}https://stackoverflow.com/questions/32932447
复制相似问题