tl; dr您是否可以使用符合协议的初始化方法一般地实例化对象,同时还保留对象的预期类型?我现在正在尝试的是seg faulting编译器.
在我正在编写的库中,我正在尝试使用Swift有限的内省功能来实现一般化序列化/反序列化对象的目标.
以下是使用反射设置变量值的全局函数的代码.如果找到字典,它会尝试协调嵌套构造:
func model__setValue<T where T: NSObject, T: Serializable>(value: AnyObject, forSerializationKey key: String, model m: T) {
let varNames = object__getVarNames(mirror: reflect(m)) // Gets a list of this object's variable names
if let i = find(m.serializationKeys, key) {
if value is [String : AnyObject] {
// This allows us to have nested dictionary representations
// of Serializable constructs and have them init properly
let t1 = reflect(m)[i].1.valueType as NSObject.Type
if t1 is Serializable.Type {
let t2 …Run Code Online (Sandbox Code Playgroud)