我如何知道数组中元素的值是否已更改? [英] How do I know if a value of an element inside an array was changed?

查看:82
本文介绍了我如何知道数组中元素的值是否已更改?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用的语言: Swift 2.3

Language Used: Swift 2.3

例如,我有一个名为 Doctor

class Doctor {
    var name = ""
    var number = 123
    init(name:String, number:String) { 
        self.name = name
        self.number = number
    }
}

在另一个类中,我将其放入数组

And in another class I made it into an array

class SomeClass {
    var doctors:[Doctor] = [
        Doctor(name: "Matt Smith", number: 11),
        Doctor(name: "David Tennant", number: 10),
        Doctor(name: "Peter Capaldi", number: 12)
    ]
}

然后出于某种原因,我决定更改 index #2

And then for some reason I decide to change the value of index #2

class SomeClass {
    ...
    // let's just say that this code was executed inside the code somewhere....
    func change() {
        doctors[2].name = "Good Dalek"
        // or
        doctors[2] = Doctor(name: "Christopher Eccleston", number: 9)
    }
    ...
}

我怎么知道 doctors 数组的值与以前不同?

How will I know that the value of the doctors Array is not the same as before?

我确实知道 filter sort 函数.我也知道如何使用 didSet 来做到这一点

I do know of filter and sort functions. I also know how to use didSet such that I could do this

var doctors:[Doctor] = [] {
    didSet {
        // do something if `doctors` was changed
    }
}

推荐答案

简单地,通过让 doctors 数组设为

Simply, by letting doctors array to be as property observer:

class Doctor {
    var name = ""
    var number = 123
    init(name:String, number:Int) {
        self.name = name
        self.number = number
    }
}


class SomeClass {
    var doctors: [Doctor] = [
        Doctor(name: "Matt Smith", number: 11),
        Doctor(name: "David Tennant", number: 10),
        Doctor(name: "Peter Capaldi", number: 12)
        ] {
        didSet {
            print("doctros array has been modifed!")
        }
    }
}


let someClass = SomeClass()
someClass.doctors[0] = Doctor(name: "New Doctor", number: 13) // "doctros array has been modifed!"

someClass.doctors.append(Doctor(name: "Appended Doctor", number: 13)) // "doctros array has been modifed!"

someClass.doctors.remove(at: 0) // "doctros array has been modifed!"

请注意,每个添加,编辑或删除操作都会影响 doctors 数组调用 didSet 代码( print("doctros数组已被修改!")).

Note that each of adding, editing or deleting operations affects doctors array calls the didSet code (print("doctros array has been modifed!")).

这篇关于我如何知道数组中元素的值是否已更改?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆