Swift'(int,int) - > $ T4'与'Point'不同

时间:2014-12-18 19:30:04

标签: xcode swift swift-playground

我对swift很新并且得到了这个错误。我希望声明要做的就是分配4个值来为Line对象创建2个Point对象。所以Line(10,20,20,40)应该在(10,20)和(20,40)处创建两个点。但我得到错误'(Int,Int) - > $ T4'与点'点不相同

class Point {
var x: Int = 0
var y: Int = 0

init(){
    x = 0
    y = 0
}

init(x: Int, y: Int) {
    self.x = x
    self.y = y
  }
}

class Line: Point {
var pointA: Point
var pointB: Point

init(p1x: Int, p1y: Int, p2x: Int, p2y: Int) {
    self.pointA(p1x, p1y)
    self.pointB(p2x, p2y)
  }
}

var lineA = Line(p1x:10, p1y:20 , p2x:20 , p2y:40)

2 个答案:

答案 0 :(得分:0)

您在Line的init中的代码毫无意义。这不是Swift的有效:

self.pointA(p1x, p1y)
self.pointB(p2x, p2y)

你不能只在这样的变量名后加上括号!另外,您没有正确地编写init。这是一个可能的解决方案:

class Line: Point {
    var pointA: Point
    var pointB: Point

    init(p1x: Int, p1y: Int, p2x: Int, p2y: Int) {
        self.pointA = Point(x:p1x, y:p1y)
        self.pointB = Point(x:p2x, y:p2y)
        super.init()
    }
}

但正如安东尼奥已经说过的,这一切都取决于你想要做什么。我上面的代码会导致你的代码正确编译,但我不知道它是否符合你的要求,因为你想要做的事情完全不可能猜到。

答案 1 :(得分:0)

在初始化程序中,您缺少创建实例 - 您只是尝试引用2个属性,就像它们是方法一样。正确的方法是:

init(p1x: Int, p1y: Int, p2x: Int, p2y: Int) {
    self.pointA = Point(x: p1x, y: p1y)
    self.pointB = Point(x: p2x, y: p2y)
}

但是存在一个架构错误:Line继承自Point,但我发现两个类之间没有任何关系 - 你至少应该调用超类初始化器,但要传递什么?

我只会在Line中定义一个新属性,并重用Point中已有的属性:

class Line: Point {
    var pointB: Point

    init(p1x: Int, p1y: Int, p2x: Int, p2y: Int) {
        self.pointB = Point(x: p2x, y:p2y)
        super.init(x: p1x, y: p1y)
    }
}

我不知道这是否合理(取决于你想要实现的目标) - 如果没有,那么我只会让Line不能继承Point。如果您需要一个通用接口,但具有不同的实现,那么您可以使用这两个类采用的协议。