我正在自己学习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
我会做这样的事情:
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()
解释:
取而不是定义更多形式的能力被定义为继承。 通常,类可以从另一个类继承方法,属性和功能。 类可以进一步分类为子类和超类。 子类 - 当一个类继承另一个类的属性,方法和功能被称为子类别。 超类 - 包含从其自身继承其他类的属性,方法和函数的类称为超类。 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,对象继承了运行时系