2017-10-10 5 views
0
func getAllPropertyName(_ aClass : AnyClass) -> [String] { 
    var count = UInt32() 
    let properties = class_copyPropertyList(aClass, &count) 
    var propertyNames = [String]() 
    let intCount = Int(count) 
    for i in 0 ..< intCount { 
     let property : objc_property_t = properties![i]! 
     guard let propertyName = NSString(utf8String: property_getName(property)) as? String else { 
      debugPrint("Couldn't unwrap property name for \(property)") 
      break 
     } 
     propertyNames.append(propertyName) 
    } 
    free(properties) 
    return propertyNames 

このコードはSwift 3.2まで動作します。しかし私はSwift 4を使用していて、空のArray [String]を与えています。Swift 4でクラスプロパティのリストを取得するにはどうすればよいですか?

+1

はhttps://stackoverflow.com/q/44762460/1187415とhttps://stackoverflow.com/q/44390378/1187415を参照してください:あなたは明示的に指定する必要がありSwift 4で '@ objc'を使用してObjective-Cランタイムにメンバーを公開してください。 –

+0

[swiftでクラスのプロパティのリスト]の可能な複製(https://stackoverflow.com/questions/24844681/list-of-classs-properties-迅速に) – Ibo

答えて

0

あなたは `以下のようなプロパティを取得することができます:

class ClassTest { 
    var prop1: String? 
    var prop2: Bool? 
    var prop3: Int? 
} 

let mirror = Mirror(reflecting: ClassTest()) 
print(mirror.children.flatMap { $0.label }) // ["prop1", "prop2", "prop3"] 
関連する問題