初始化程序与默认属性值

时间:2016-10-09 07:40:43

标签: ios swift oop

当我浏览Swift文档时,我了解到有两种方法可以初始化"一个类中的变量。

  1. 只需声明默认属性值:
  2. 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方法
    2. 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)
          }
      }
      

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

      为什么我会使用另一个而你是否看到任何一个解决方案中可以简化的问题或事情?

1 个答案:

答案 0 :(得分:1)

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

let atv = Vehicle(numberOfWheels: 4, currentSpeed: 20)
let motorcycle = Vehicle(numberOfWheels: 2, currentSpeed: 40)

如果值始终与为所有类传递一些常量值相同,那么默认值就更好了。

另一个选项是在执行此操作后实例化然后更新属性:

let atv = Vehicle()
atv.numberOfWheels = 4

但由于各种原因,可能需要初始化参数:

  1. 安全。您可能希望在初始化

  2. 时要求这些类属性获得值
  3. 可读性。更紧凑。

  4. 灵活性。您可以创建多个便利性,以便使用不同的参数初始化您的车辆类。假设numberOfWheels不相关,但您确实想要用颜色初始化。您可以设想一个方便的初始化,以便您可以这样初始化:

    让rainbowVain =车辆(颜色:UIColor.White)

  5. 对于您的第一个初始化方法,有时代码在此格式中更清晰一些,尤其是对于viewControllers。

    var description: String {
        return "traveling at \(currentSpeed) per hour"
    }
    

    这会进入计算属性,如果感兴趣,您可以查看更多内容。希望这会有所帮助。