我对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)
答案 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
。如果您需要一个通用接口,但具有不同的实现,那么您可以使用这两个类采用的协议。