【发布时间】:2017-02-12 01:52:49
【问题描述】:
我正在尝试从 Swift 中的类中获取初始化程序的所有签名。初始化器可以镜像,我可以找到如下代码的签名。
enum MessageType {
case say
case shout
case wisper
}
class Message {
var text = ""
var type : MessageType = .say
init(text: String, type: MessageType) {
self.type = type
self.text = text
}
init(text: String) {
self.text = text
}
}
let firstInit = Message.init(text:)
let secondInit = Message.init(text:type:)
let firstMirror = Mirror(reflecting: firstInit)
let secondMirror = Mirror(reflecting: secondInit)
print(firstMirror.subjectType)
// (String) -> Message
print(secondMirror.subjectType)
// ((String, MessageType)) -> Message
但是,此代码需要指定我要查找的init。我期望的是如下所示:
let mirror = Mirror(reflecting: Message)
let inits = mirror.initializers
// something like [Message.init(text:), Message.init(text:type:)] as [Any]
for method in inits {
let mirror = Mirror(reflecting: method)
print(method.subjectType)
}
如何使用 Mirror 从类中获取所有 init 初始化程序?
【问题讨论】:
标签: swift reflection initialization mirror