Xcode 从子类更新swift编程超类变量
我刚刚开始学习编程,并试图理解子类如何更新超类中的变量。我有一个家族超类,它跟踪家族成员,每次创建家族成员时,家族成员变量都会向其中添加1。这是我的 我尝试了几种方法,包括在超类中创建一个updatefamilymembers方法,并在init语句中从子类调用它,但仍然不起作用。如果有人能帮助我,或者至少能解释为什么它没有更新,我将不胜感激。谢谢 哦,游乐场声明它运行familymembers++4次,但变量没有保留更新。我也尝试过创建两个变量,并让其中一个更新另一个,但仍然一无所获 编辑: 多谢各位。我会尝试更好地理解这个概念。我感谢你的帮助。谢谢:DXcode 从子类更新swift编程超类变量,xcode,macos,swift,superclass,Xcode,Macos,Swift,Superclass,我刚刚开始学习编程,并试图理解子类如何更新超类中的变量。我有一个家族超类,它跟踪家族成员,每次创建家族成员时,家族成员变量都会向其中添加1。这是我的 我尝试了几种方法,包括在超类中创建一个updatefamilymembers方法,并在init语句中从子类调用它,但仍然不起作用。如果有人能帮助我,或者至少能解释为什么它没有更新,我将不胜感激。谢谢 哦,游乐场声明它运行familymembers++4次,但变量没有保留更新。我也尝试过创建两个变量,并让其中一个更新另一个,但仍然一无所获 编辑: 多
class Family {
var familyMembers = 0
init() {
familyMembers++
}
func talk() {
println("The family is talking")
}
func argue() {
println("The family is arguing")
}
}
class Son : Family {
var hisName = ""
init(name: String) {
super.init()
self.hisName = name
}
override func argue() {
println("\(hisName) is arguing")
}
}
class Mother : Family {
var herName = ""
init(name: String) {
super.init()
self.herName = name
}
}
let barthelemy = Family()
let ayden = Son(name: "ayden")
let tasha = Mother(name: "tasha")
let jim = Son(name: "jim")
barthelemy.familyMembers
这是因为每次创建
族
对象或子类(即子
或母
)时,您都在引用不同的族
:familyMembers++
被调用,但它是针对每个特定族成员的变量,而不是每个对象访问的共享变量
您似乎对子类(以及继承)的象征意义有点困惑:与其认为子类属于其父类,不如假设子类是其父类的更具体版本。例如,捷豹
将是动物
的一个子类;轿车
将是汽车
的一个子类;以您的示例为例,子
不是族
的子类,而是族成员
的子类
考虑以下示例,在该示例中,我们将一个公共的家族
对象传递给家族成员
构造函数,以跟踪成员的数量:
import Cocoa
class Family {
var familyMembers = 0
func talk() {
println("The family is talking")
}
func argue() {
println("The family is arguing")
}
}
class FamilyMember {
init(family: Family) {
family.familyMembers++
}
}
class Son : FamilyMember {
var hisName = ""
init(family: Family, name: String) {
super.init(family: family)
self.hisName = name
}
}
class Mother : FamilyMember {
var herName = ""
init(family: Family, name: String) {
super.init(family: family)
self.herName = name
}
}
let barthelemy = Family()
let ayden = Son(family: barthelemy, name: "ayden")
let tasha = Mother(family: barthelemy, name: "tasha")
let jim = Son(family: barthelemy, name: "jim")
barthelemy.familyMembers // returns '3'
这是因为每次创建
族
对象或子类(即子
或母
)时,您都在引用不同的族
:familyMembers++
被调用,但它是针对每个特定族成员的变量,而不是每个对象访问的共享变量
您似乎对子类(以及继承)的象征意义有点困惑:与其认为子类属于其父类,不如假设子类是其父类的更具体版本。例如,捷豹
将是动物
的一个子类;轿车
将是汽车
的一个子类;以您的示例为例,子
不是族
的子类,而是族成员
的子类
考虑以下示例,在该示例中,我们将一个公共的家族
对象传递给家族成员
构造函数,以跟踪成员的数量:
import Cocoa
class Family {
var familyMembers = 0
func talk() {
println("The family is talking")
}
func argue() {
println("The family is arguing")
}
}
class FamilyMember {
init(family: Family) {
family.familyMembers++
}
}
class Son : FamilyMember {
var hisName = ""
init(family: Family, name: String) {
super.init(family: family)
self.hisName = name
}
}
class Mother : FamilyMember {
var herName = ""
init(family: Family, name: String) {
super.init(family: family)
self.herName = name
}
}
let barthelemy = Family()
let ayden = Son(family: barthelemy, name: "ayden")
let tasha = Mother(family: barthelemy, name: "tasha")
let jim = Son(family: barthelemy, name: "jim")
barthelemy.familyMembers // returns '3'
非常感谢你的回答。如果你有时间的话,你能解释一下这条线在做什么吗超级。init(family:family)我不理解这整件事。。再次感谢!当然可以
super.init(family:family)
正在调用超类的构造函数,并将变量family
作为第一个参数传入(该参数本身已传入构造函数)。这看起来可能有点混乱,因为family
出现了两次:第一次是init(family:family)
中定义的参数名称,第二次是您实际传递的参数名称。非常感谢您的回答。如果你有时间的话,你能解释一下这条线在做什么吗超级。init(family:family)我不理解这整件事。。再次感谢!当然可以super.init(family:family)
正在调用超类的构造函数,并将变量family
作为第一个参数传入(该参数本身已传入构造函数)。它可能看起来有点混乱,因为family
出现了两次:第一次是init(family:family)
中定义的参数名称,第二次是您作为参数实际传递的名称。