【发布时间】:2023-03-16 18:26:01
【问题描述】:
我有一个协议,其中包含一些 { get } 和 { get set } 变量和扩展,我在其中设置了前者,并在初始化类时 - 也设置了后者。我想在字典中返回所有这些,即:
protocol SomeProtocol {
var id: Int { get }
var name: String { get set }
var isItTrue: Bool { get }
}
extension SomeProtocol where Self: SomeClass {
var id: Int { return 1 }
var isItTrue: Bool { return true }
func classProps() {
var dict = [String: AnyObject]()
let mirrorSelf = Mirror(reflecting: self)
for mirrorChild in mirrorSelf.children { print(mirrorChild.label) }
}
}
class SomeClass {
// just a class, nothing special
}
class MirrorMe: SomeClass, SomeProtocol {
var name: String = "Some name"
}
class MirrorMirrorOnTheWall {
func talkToTheMirror() {
let mirrorThis = MirrorMe()
mirrorThis.classProps() // returns only "name" property
}
}
正如我在评论中所写,classProps 仅返回我在子类中设置的协议变量。如何在 Mirror 的孩子中同时包含 id 和 isItTrue?
附言对不起这个糟糕的例子,这只是一个简单的例子:)
【问题讨论】:
-
老兄,你用的是什么版本的 XCode? :)我的问题有一些部分答案:当我在子类初始化后中断时,我在调试器中看不到协议变量,我可以通过
po something打印它们,但在 XCode 的变量树中看不到它们