Xcode 从子类更新swift编程超类变量

Xcode 从子类更新swift编程超类变量,xcode,macos,swift,superclass,Xcode,Macos,Swift,Superclass,我刚刚开始学习编程,并试图理解子类如何更新超类中的变量。我有一个家族超类,它跟踪家族成员,每次创建家族成员时,家族成员变量都会向其中添加1。这是我的 我尝试了几种方法,包括在超类中创建一个updatefamilymembers方法,并在init语句中从子类调用它,但仍然不起作用。如果有人能帮助我,或者至少能解释为什么它没有更新,我将不胜感激。谢谢 哦,游乐场声明它运行familymembers++4次,但变量没有保留更新。我也尝试过创建两个变量,并让其中一个更新另一个,但仍然一无所获 编辑: 多

我刚刚开始学习编程,并试图理解子类如何更新超类中的变量。我有一个家族超类,它跟踪家族成员,每次创建家族成员时,家族成员变量都会向其中添加1。这是我的

我尝试了几种方法,包括在超类中创建一个updatefamilymembers方法,并在init语句中从子类调用它,但仍然不起作用。如果有人能帮助我,或者至少能解释为什么它没有更新,我将不胜感激。谢谢

哦,游乐场声明它运行familymembers++4次,但变量没有保留更新。我也尝试过创建两个变量,并让其中一个更新另一个,但仍然一无所获

编辑:

多谢各位。我会尝试更好地理解这个概念。我感谢你的帮助。谢谢:D

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)
中定义的参数名称,第二次是您作为参数实际传递的名称。