Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何知道数组中元素的值是否已更改?_Arrays_Swift_Valuechangelistener - Fatal编程技术网

Arrays 如何知道数组中元素的值是否已更改?

Arrays 如何知道数组中元素的值是否已更改?,arrays,swift,valuechangelistener,Arrays,Swift,Valuechangelistener,使用的语言:Swift 2.3 例如,我有一个名为Doctor class Doctor { var name = "" var number = 123 init(name:String, number:String) { self.name = name self.number = number } } 在另一节课上,我把它做成了一个数组 class SomeClass { var doctors:[Doctor]

使用的语言:Swift 2.3

例如,我有一个名为
Doctor

class Doctor {
    var name = ""
    var number = 123
    init(name:String, number:String) { 
        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)
    ]
}
然后出于某种原因,我决定更改
index
#2的值

我如何知道
doctors
数组的值与以前不同

我确实知道
过滤器
排序
功能。我还知道如何使用didSet,这样我就可以做到这一点

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

简单地说,让
医生
数组如下:


请注意,每个添加、编辑或删除操作都会影响
医生
数组调用
didSet
代码(
print(“doctros数组已修改!”)
)。

只需将
医生
数组设置为:


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

但是,如果只更改了doctors[0]中的一个属性,是否会触发该操作?我知道,如果我向doctors[0]附加一个值,就会触发didSet@如果你添加了一个新的医生或者修改了一个现有的医生,那么应该叫ZonilyJame didSet。这似乎是一种方法。如果我想修改一个对象,我只需在所述索引处删除它,然后在所述索引处插入。工作,但不是我想象的工作方式haha@ZonilyJame您可能还需要检查及其答案,以便观察数组中的特定元素。但是,如果仅更改了医生[0]内的属性,是否会触发此操作?我知道,如果我向医生[0]附加一个值,则会触发didSet@如果你添加了一个新的医生或者修改了一个现有的医生,那么应该叫ZonilyJame didSet。这似乎是一种方法。如果我想修改一个对象,我只需在所述索引处删除它,然后在所述索引处插入。工作,但不是我想象的工作方式haha@ZonilyJame您可能还需要检查和他们的答案,以便观察数组中的特定元素。您可以做的最简单的事情是不允许出现这种情况。将名称设置为常量(
let
)或将
Doctor
设置为
struct
。不可变的概念非常强大,它大大简化了设计。但我需要观察阵列内部的变化。您可以做的最简单的事情就是不允许出现这种情况。将名称设置为常量(
let
)或将
Doctor
设置为
struct
。不可变的概念非常强大,它大大简化了设计。但我需要观察阵列内部的变化。
var doctors:[Doctor] = [] {
    didSet {
        // do something if `doctors` was changed
    }
}
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!"