协议中的方法

问题描述:

我对于面向协议的编程非常陌生,所以我的问题可能很容易。协议中的方法

我打算定义一个具有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) 
} 
+0

这是非常合理的 – Goktug

+0

这种方法的问题是,你总是要转换返回值:'让CIRCLE2 = circle1.clone()as!圆' –

+0

这是通用协议的本质。 –