首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化器与默认值

初始化器与默认值
EN

Stack Overflow用户
提问于 2016-10-09 07:40:42
回答 1查看 34关注 0票数 0

在阅读Swift文档时,我了解到在类中有两种“初始化”变量的方法。

  1. 只需声明缺省属性值:
代码语言:javascript
复制
class Vehicle {
    var numberOfWheels = 4
    var currentSpeed = 0.0
    var description: String {
        return "traveling at \(currentSpeed) per hour"
    }
    func makeNoise() {
        print("vroom vroom")
    }
}

class Bicycle: Vehicle {
    var hasBasket = true
}
  1. 使用init方法
代码语言:javascript
复制
class Vehicle {
    var numberOfWheels: Int
    var currentSpeed: Double
    init(numberOfWheels: Int, currentSpeed: Double) {
        self.numberOfWheels = numberOfWheels
        self.currentSpeed = currentSpeed
    }
    var description: String {
        return "traveling at \(currentSpeed) per hour"
    }
    func makeNoise() {
        print("vroom vroom")
    }
}

class Bicycle: Vehicle {
    var hasBasket: Bool
    init() {
        hasBasket = true
        super.init(numberOfWheels: 2, currentSpeed: 10)
    }
}

当然,这两个代码示例有不同的结果,但一般来说,第一种方法似乎更简洁(代码更少)。

为什么我会使用一个而另一个,你看到任何问题或事情,可以简化在这两个解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-09 08:02:46

第二个方法(init)允许您输入变量,这使类更加灵活。例如,如果您希望通过具有不同数量车轮的车辆类实例化各种车辆,则可以传入:

代码语言:javascript
复制
let atv = Vehicle(numberOfWheels: 4, currentSpeed: 20)
let motorcycle = Vehicle(numberOfWheels: 2, currentSpeed: 40)

对于您来说,如果值总是相同的,那么默认值要比必须为所有类传递一些常量值要好得多。

另一个选项是实例化,然后在这样做之后更新属性:

代码语言:javascript
复制
let atv = Vehicle()
atv.numberOfWheels = 4

但是,出于各种原因,可能希望能够使用参数进行初始化:

  1. 安全。您可能希望在初始化时要求这些类属性获得值。
  2. 可读性。更紧凑。
  3. 灵活性。您可以在inits中创建多个方便,以便使用不同的参数初始化您的车辆类。假设numberOfWheels是不相关的,但是您确实想用颜色进行初始化。您可以想象其中的方便之处,这样您就可以像这样初始化: 设rainbowVain =车辆(颜色: UIColor.White)

对于第一种初始化方法,有时这种格式的代码会更清晰一些,特别是对于viewControllers。

代码语言:javascript
复制
var description: String {
    return "traveling at \(currentSpeed) per hour"
}

这涉及到计算属性,如果您感兴趣,可以更深入地研究这些属性。希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39941192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档