快速初始化

时间:2016-12-11 08:39:24

标签: swift

我正在尝试做这个练习。我一直在收到错误。

  

"创建一个Triangle类,其属性用于存储每边的长度。当三边长度不同时,三角形称为斜角,当两边长度相同时,三角形称为等腰,或者当三边长度相同时,三角形称为等边。为您的类创建一个初始化程序,它接受三个参数并正确设置类属性。接下来,创建第二个初始化器,以便在三角形为等边时使用。请记住,所有三个边都是相同的长度,所以这个方法应该只接受一个参数,但仍然应该设置所有三个属性。

我的代码:

class Triangle {

   var sideA: Int
   var sideB: Int
   var sideC: Int

   init(sideA: Int, sideB: Int, sideC: Int) {

      self.sideA = sideA
      self.sideB = sideB
      self.sideC = sideC
   }

   override convenience init() {

      //I can figure this part out, no problem.
   }

   // I cannot figure out the next part.

3 个答案:

答案 0 :(得分:1)

因为你说你可以自己弄清楚方便的内部:

将一个参数添加到您的便利init中,删除override除非您覆盖某些内容(看起来不像),然后使用}关闭类定义。你完成了。

答案 1 :(得分:1)

你似乎被困在了方便的初始部分。

正如问题所示,等边三角形的初始化器应该有1个参数,所以让我们加一个:

convenience init(sideLength: Int) {

}

每个便利初始化程序必须调用指定的构造函数或其他便利构造函数。在这种情况下,您可以调用另一个带有3个参数的指定构造函数。

convenience init(sideLength: Int) {
    self.init(sideA: ???, sideB: ???, sideC: ???)
}

你差不多完成了。你只需要弄清楚参数。

我想在这一点上你可以猜出这三个参数是什么。快去吧!

在这里回答:

  

self.init(sideA: sideLength, sideB: sideLength, sideC: sideLength)

答案 2 :(得分:1)

所以你需要提供一个初始化器来创建一个等边三角形

class Triangle {

    var sideA: Int
    var sideB: Int
    var sideC: Int

    init(sideA: Int, sideB: Int, sideC: Int) {

        self.sideA = sideA
        self.sideB = sideB
        self.sideC = sideC
    }

    convenience init(equilateralWithEdge edge:Int) {
        self.init(sideA: edge, sideB: edge, sideC:edge)
    }

}

现在你可以建立一个等边三角形写作

let triangle = Triangle(equilateralWithEdge: 10)

测试

triangle.sideA // 10
triangle.sideB // 10
triangle.sideC // 10