繁体   English   中英

使用For循环中的变量更改类中的值

[英]Change value in class with variable from For loop

我有以下关于swift的问题,可以说我有一个像这样的课程:

class Person {
    var firstName, lastName, eyeColor: String

    init(firstName: String = "", lastName: String = "", eyeColor: String = "") {
        self.firstName = firstName
        self.lastName = lastName
        self.eyeColor = eyeColor
    }
}

例如,我可以创建一个像这样的人:

var myFriend = Person(firstName: "Robin", eyeColor: "Yellow")

但是,正如您现在可以知道的那样,我尚未为lastName分配一个值,即为空或“”。

我想要做的是遍历myFriend中的所有值,并检查一个值是否为空,如果是的话,我想用“无信息”之类的值替换空值。

我确实找到了类似的东西

    let mirroredRecord = Mirror(reflecting: myFriend)
    for (index, attr) in mirroredRecord.children.enumerated() {
        if var value = attr.label as String? {
            if value == "" {
                value = "No info"
            }
            print("Attr \(index): \(value) = \(attr.value)")
        }
    }

但是,这不会更改myFriend变量中的值。

在我看来,以下内容似乎合乎逻辑,但我不确定如何迅速执行此操作。

for (index, attr) in mirroredRecord.children.enumerated() {
    if var value = attr.label as String? {
        if value == "" {
            myFriend.value = "No info"
        }
        print("Attr \(index): \(value) = \(attr.value)")
    }
}

但是,由于.value不是选项之一(名字,姓氏,eyeColor),因此不喜欢它。

有人对此有任何选择或解决方案吗?

如果使用KeyPath表示要更新的字段,则可以使用for循环更新class

func update() {
    let kpaths: [ReferenceWritableKeyPath<Person, String>] = [\.firstName, \.lastName, \.eyeColor]

    for path in kpaths {
        if self[keyPath: path].isEmpty {
            self[keyPath: path] = "No information"
        }
    }
}

就是说,我建议只使用nil代表"No Information" 可选参数

class Person {
    var firstName, lastName, eyeColor: String?

    init(firstName: String? = nil, lastName: String? = nil, eyeColor: String? = nil) {
        self.firstName = firstName
        self.lastName = lastName
        self.eyeColor = eyeColor
    }
}

然后,当您访问字段时,可以使用nil合并运算符 ?? 拆开值并显示nil值,但是您喜欢:

someLabel.text = self.firstName ?? ""

要么:

someLabel.text = self.firstName ?? "No information"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM