【发布时间】:2020-05-15 14:05:52
【问题描述】:
我正在自己学习 swift,但我无法让这段代码运行,我正在尝试创建一个从 Person 类继承的具有新的“Country”属性的类“Inhabitant”,有 2 个初始化程序: - 接受名字和姓氏并将国家/地区设置为空字符串 - 一个需要名字、姓氏和国家的 并创建一个 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
【问题讨论】:
-
将
<#T##String#>更改为某个字符串。简单的方法是选择它并输入它是否仍然是“实时”占位符;否则你只需要手工完成。了解 Xcode 的“自动完成”功能。你想要的是firstname和lastname这里。换句话说,您只想将传入的firstname和lastname值沿继承链向上传递到super.init调用。 -
在 Xcode 中,看到
super.init(firstname:后面的单词String?那是一个“编辑器占位符”。你需要用一些东西来代替它。 -
@Sweeper 感谢您重置我的大脑 - 这里是清晨!
-
但是我为什么要更换它呢?我想在 tst 函数中调用这个字符串,而不是在初始化程序中
-
您需要将变量传递到这些占位符所在的位置。即
super.init(firstname: firstname, lastname: lastname)
标签: ios swift class inheritance