如何更改 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"
我有一个学生 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"