当前位置: 首页 > 知识库问答 >
问题:

Swift继承和类

堵才哲
2023-03-14

我正在自己学习swift,但我无法让这个代码运行,我正在尝试创建一个类“Inhabitant”,它继承了Person类的一个新的“Country”属性,有两个初始值设定项:-一个接受firstname和lastname,并将Country设置为空String-一个接收firstname,lastname和country,并创建String类型的计算属性描述,该描述返回由空格分隔的名字、姓氏和国家

class Person {
    var firstname: String
    var lastname: String
    var fullname: String {
        return firstname + " " + lastname
    }

    init(firstname: String, lastname: String) {
        self.firstname = firstname
        self.lastname = lastname
    }
}

    class Inhabitant: Person {
    var country: String? = nil
    var description: String {
        return firstname + " " + lastname + " " + country ?? ""
    }
    override init(firstname: String, lastname: String) {
        super.init(firstname: <#T##String#>, lastname: <#T##String#>)
        self.country = ""
    }
    init(firstname: String, lastname: String, Country: String) {
        super.init(firstname: <#T##String#>, lastname: <#T##String#>)
    }
}

func tst() {
    let perso = Inhabitant(firstname: "toto", lastname: "bobo")
    print(perso)
}

代码无法运行:

Editor placeholder in source file

共有1个答案

方宏富
2023-03-14

我会做这样的事情:

class Person {
    var firstname: String
    var lastname: String
    var fullname: String {
        return firstname + " " + lastname
    }

    init(firstname: String, lastname: String) {
        self.firstname = firstname
        self.lastname = lastname
    }
}

class Inhabitant: Person {
    var country: String? = nil
    var description: String {
        //1
        return "\(firstname) \(lastname) \(country ?? "")"
    }
    override init(firstname: String, lastname: String) {
        //2
        super.init(firstname: firstname, lastname: lastname)
        self.country = ""
    }
    init(firstname: String, lastname: String, country: String) {
        super.init(firstname: firstname, lastname: lastname)
        self.country = country
    }
}

func tst() {
    let perso = Inhabitant(firstname: "toto", lastname: "bobo")
    let perso2 = Inhabitant(firstname: "toto", lastname: "bobo", country: "Belgium")
    print(perso.fullname)
    print(perso2.description)
}

tst()

解释:

    < Li > swift中的字符串插值使用此语法完成,参见swift编程语言 < li >当您覆盖初始化器时,您想要的是将您收到的参数传递给您的超级初始化器。
 类似资料:
  • 取而不是定义更多形式的能力被定义为继承。 通常,类可以从另一个类继承方法,属性和功能。 类可以进一步分类为子类和超类。 子类 - 当一个类继承另一个类的属性,方法和功能被称为子类别。 超类 - 包含从其自身继承其他类的属性,方法和函数的类称为超类。 Swift 4类包含超类,它调用和访问方法,属性,函数和重写方法。 此外,属性观察器还用于添加属性并修改存储或计算的属性方法。 基类 不从其他类继承方

  • 继承我们可以理解为一个类获取了另外一个类的方法和属性。 当一个类继承其它类时,继承类叫子类,被继承类叫超类(或父类) 在 Swift 中,类可以调用和访问超类的方法,属性和下标脚本,并且可以重写它们。 我们也可以为类中继承来的属性添加属性观察器。 基类 没有继承其它类的类,称之为基类(Base Class)。 以下实例中我们定义了基类 StudDetails ,描述了学生(stname)及其各科成

  • 问题内容: 您可以在Swift中继承枚举吗?关于枚举继承,应该注意哪些规则? 以下测试代码: 产生 问题答案: 在Swift语言中,我们有Structs,Enum和Classs。Struct和Enum通过副本传递,而类通过引用传递。只有类支持继承,枚举和结构不支持。 因此,要回答您的问题,您不能继承Enum(和Struct类型)。在这里看看:

  • FAQs in section [24]: [24.1] 如何表示“私有继承”? [24.2] 私有继承和组合(composition)有什么类似? [24.3] 我应该选谁:组合还是私有继承? [24.4] 从私有继承类到父类需要指针类型转换吗? [24.5] 保护继承和私有继承的关系是什么? [24.6] 私有继承和保护继承的访问规则是什么? 24.1 如何表示“私有继承”? 用 : priv

  • 在面向对象的程序设计中,定义一个新的 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类,而被继承的 class 称为基类、父类或超类。 Python 中继承的语法如下: class Parent: pass class Child(Parent): pass 在第 1 行,定义了父类 Parent; 在第 4 行,定义了子类 Child,语法

  • 问题内容: 我已经读过类似这样的文章,其中介绍了在Swift中进行子类化或仅具有其本机基础而不进行子类化的区别。但是它们都有些过时,我对此主题尚不清楚。 什么时候应该继承?子类化与不子类化之间的实际区别是什么?Swift中的建议是什么? 问题答案: 苹果公司有关NSObject的文档介绍如下: NSObject是大多数Objective-C类层次结构的根类。通过NSObject,对象继承了运行时系