协议中的方法
问题描述:
我对于面向协议的编程非常陌生,所以我的问题可能很容易。协议中的方法
我打算定义一个具有clone()方法的Cloneable协议。此方法返回其内容与调用clone()方法的对象内容相同的对象。因此,clone()方法的返回类型必须适应采用Cloneable协议的类。
protocol Cloneable{
func clone() -> AnyObject
}
public final class Circle : Cloneable{
private var radius : Double
private var area : Double
private var perimeter : Double
public init(radius : Double){
self.radius = radius
area = PI * radius * radius
perimeter = 2 * PI * radius
}
public convenience init(){
self.init(radius : 1.0)
}
func clone() -> Circle{
return Circle(radius : self.radius)
}
}
我得到错误,说明Class Circle不符合Cloneable协议。 它要我用Circle改变AnyObject。如果我这样做,那么这个协议如何用于所有类?
答
改变此密码 -
func clone() -> Circle{
return Circle(radius : self.radius)
}
这个代码 -
func clone() -> AnyObject {
return Circle(radius : self.radius)
}
这是非常合理的 – Goktug
这种方法的问题是,你总是要转换返回值:'让CIRCLE2 = circle1.clone()as!圆' –
这是通用协议的本质。 –