swift - 为什么 self 与 init 一起使用而不是 color
问题描述
我正在参加关于 swift 的在线课程,并展示了一个示例。为什么 self 与 init 方法调用一起使用而不是颜色?
class Car {
var colour = "Black"
var numberOfSeats = 5
var typeOfCar : CarType = .Coupe
init() {
}
convenience init (customerChosenColour : String) {
self.init()
colour = customerChosenColour
}
}
解决方案
init()
当有人像这样创建该类的新实例时运行:
var newInstanceOfCar = Car()
Aconvenience init
允许您为某些用例创建其他初始化程序,例如当customerChosenColour
需要指定 a 时。在这些情况下,它使事情变得更加方便。
之所以self
使用,是因为在创建的时候convenience init
,还需要调用“main” init
,它是 的一个属性self
。
您可以self
在颜色上使用,但这不是必需的。self.colour
如果不明确,您将使用,colour
就像在这个例子中一样:
class Car {
var colour = "Black"
var numberOfSeats = 5
var typeOfCar : CarType = .Coupe
init() {
}
convenience init (colour : String) {
self.init()
self.colour = colour
}
}
注意colour
是 的属性Car
,也是 的参数名称convenience init
。写起来会很混乱colour = colour
。
所以我们常self
说我们希望类中的变量 ,self.colour
等于参数的值 , colour
。
推荐阅读
- java - Java中的井字游戏设计级别1
- react-native - 默认使用 React Native 打开 android 模拟器
- android - 如何在 Android 上对 RxJava Completable.error 进行单元测试
- sql-server - sql查询不存在的条目
- odata - 简单的休息数据提供者不会接受 Odata 数据
- java - 融合位置管理器 API 准确性
- unit-testing - Mocha 测试,在每个文件运行之前清理磁盘数据库
- react-native - 无法识别的 WebSocket 连接选项 `agent`, `perMessageDeflate`, `pfx`, `key`, `passphrase`... 你的意思是把这些放在 `headers` 下吗?
- matlab - 点云中每个点的欧几里得距离
- machine-learning - 如何使老式输入层仅用于测试阶段?