gpt4 book ai didi

swift - 创建一个父类(super class),该父类(super class)将启用 Dictionary 为其子类进行自定义初始化

转载 作者:行者123 更新时间:2023-11-28 07:11:17 26 4
gpt4 key购买 nike

我做了什么:

我有几个模型类,每个模型类都有可变数量的属性。例如:

class A{
var a1 : String
var a2 : Int

init(){...}
}

class B{
var b1 : String
var b2 : Int
var b3 : AnyObject

init(){...}
}

等等。为了从 Dictionary 初始化这些类,我创建了一个带有 Dictionary 参数的自定义初始化程序,并像这样设置每个属性

public class A{
var a1 : String
var a2 : Int

public init(d : Dictionary<String,AnyObject>){
if let value = d["a1"] as? String {
a1 = value
}else{
a1 = ""
}

if let value = d["a2"] as? Int {
a2 = value
}else{
a2 = 0
}
}
}

所以,基本上我可以像这样初始化类A:

var objectOfClassA : A = A(d:["a1":"str", "a2":10])

如果 Dictionary 没有与类的键属性相对应的正确值,它只会为该属性分配一个默认值。


问题:

在此实现中,我的问题是我必须为每个要创建的模型类编写 init 方法。我的目标是避免为每个模型类编写 init 方法。


我想实现的目标:

我不想为每个模型类编写 init 方法,而是想创建一个父类(super class) Model,它将提供一个 Dictionary init 方法对它的所有子类都是这样。所以我的 A 类 将如下所示:

class A : Model{
var a1 : String
var a2 : Int
}

并且仍然应该像以前一样从 Dictionary 进行初始化。

我尝试使用 Swift 的反射函数来检查正在初始化的对象的属性,但我无法从字典中设置属性。我猜 reflect(self)[1] 可以看到的属性是只读的。请告诉我如何实现此类功能。

最佳答案

不久前我自己试过了,还没有找到一个纯粹的 Swift 解决方案。但是,如果您的基类继承自 NSObject,您始终可以使用

回退

setValue("yourPropertyValue", forKey:"yourPropertyName")

关于swift - 创建一个父类(super class),该父类(super class)将启用 Dictionary 为其子类进行自定义初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28342414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com