如何更改 class 的所有实例中的 属性 的值?

How to change the value of a property of all the instances of a class?

我有一个学生 Class 和一个制服 Class。 创建 Student 实例时,学生将拥有绿色制服。

class Student{
    var uniform = Uniform.uniformColor
}

class Uniform{
    static var uniformColor = "Green"
        {
        didSet(newColor){
            print("Change to \(newColor)")

        }
    }

}



let student1 = Student()
let student2 = Student()

print(student1)
print(student2)

Uniform.uniformColor = "Red"

print(Uniform.uniformColor)

print(student1.uniform)
//print Green
print(student2.uniform)
//print Green
let student3 = Student()
print(student3.uniform)
//print Red

如何将所有学生的制服颜色一次性设置为红色?

您可以尝试创建一个学生数组,将每个学生添加到其中。 接下来对所有学生进行 for-loop 迭代,并为制服指定红色。

var students = [Student]()
students.append(student1)
students.append(student2)
for student in students {
    student.uniform.uniformColor = "Red"
}

如果您始终希望学生拥有最新的 Uniform.uniformColor,则将 uniform 更改为计算的 属性:

class Student {
    var uniform: String { return Uniform.uniformColor }
}

示例:

let student1 = Student()
let student2 = Student()

print(student1.uniform)  // Green
print(student2.uniform)  // Green

Uniform.uniformColor = "Red"

print(student1.uniform)  // Red
print(student2.uniform)  // Red

为什么不将 Uniform 的颜色声明为实例 属性 并创建一个默认初始化程序,它总是在 Student [=16] 中创建一个红色的 Uniform =]?

class Student 
{  
  let uniform : Uniform

  init() {
    self.uniform = Uniform(color:"Red")
  }
}

class Uniform
{
  var color = "Green" {
    didSet(newColor){
      print("Change to \(newColor)")
    }
  }

  init(color : String) {
    self.color = color
  }
}

let student = Student()
print(student.uniform.color) // "Red"