符合具有通用功能的协议的变量

时间:2017-05-06 03:16:03

标签: swift generics protocols

我的协议看起来像这样:

protocol MyProtocol {
   associatedtype SpeedType
   var name: String {get set}
   func forward(_: SpeedType)
}

我制作了2个符合此协议的简单类:

class A: MyProtocol {
   typealias SpeedType = Double
   var name: String

   init(name:String) {
       self.name = name
   }

   func forward(_ s: Double) {
       print("Moving \(s) km/h")
   }
}

class B: MyProtocol {
   typealias SpeedType = Int
   var name: String

   init(name:String) {
       self.name = name
   }

   func forward(_ s: Int) {
       print("Moving \(s) km/h")
   }
}

我想要实现的是能够声明一个 MyProtocol 类型的变量,并在以后初始化它:

let x: Bool = true
var person: MyProtocol
if x {
   person = A(name: "Robot")
} else {
   person = B(name: "Human")
}

在我将 forward()方法“通用”之前,我能够做到这一点,但是现在我收到了下一个错误: 协议“MyProtocol”只能用作通用约束,因为它具有Self或关联类型要求。

所以我的目标是有一个方法 forward(),它可以作为我指定的类型的参数参数,并且还能够声明一个符合我的类型的变量协议

0 个答案:

没有答案