【问题标题】:Methods in Protocols [duplicate]协议中的方法 [重复]
【发布时间】:2017-08-17 14:59:50
【问题描述】:

我对面向协议的编程很陌生,所以我的问题可能很简单。

我打算定义一个具有 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。如果我这样做,该协议如何用于所有类?

【问题讨论】:

    标签: swift protocols


    【解决方案1】:

    更改此代码 -

    func clone() -> Circle{
       return Circle( radius : self.radius )
    }
    

    到此代码 -

     func clone() -> AnyObject {
        return Circle( radius : self.radius )
     }
    

    【讨论】:

    • 很合理
    • 这种方法的问题是你总是必须转换返回值:let circle2 = circle1.clone() as! Circle
    • 这是通用协议的本质。
    • 查看stackoverflow.com/questions/25645090/… 以获得避免此问题的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多