Objective-C 時代には class_copyPropertyList でできたようです。これをキーワードにググるといくつか記事が出てくると思われます。
Swift 4 で同様のことを行う場合は Mirror とやらを使うようです。
import UIKit
protocol PropertyNames {
func propertyNames() -> [String]
}
extension PropertyNames {
func propertyNames() -> [String] {
return Mirror(reflecting: self).children.compactMap{ $0.label }
}
}
class Author : PropertyNames {
var name: String
var category: Int
init() {
self.name = ""
self.category = 0
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var author = Author()
print("\(author.propertyNames())")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
出力結果は
[“name”, “category”]
参照:
List of class’s properties in swift
Swift reflectionについて
[Swift]flatMap・compactMapの挙動はソースコードを読んで理解しよう〜型情報と実装から難関メソッドを突破する〜