Swift中的泛型变量声明

时间:2017-09-12 07:50:26

标签: swift generics var

我在游乐场创建了一个简单的代码。

class CarBrand {

}

class Bmw: CarBrand {

}

class Mercedes: CarBrand {

}

class Car<T: CarBrand> {

}

class Employee {
    var car: Car<T: CarBrand>?// of cource this 
    doesn't work, but the idea is that there might be a car with any type
}

let employeeOne = Employee()
employeeOne.car = Car<BMw>()

let employeeTwo = Employee()
employeeTwo.car = Car<Mercedes>()

简单的问题是:如何在编译时不知道类型时使用泛型声明变量?似乎Swift需要定义类型并且要知道,但这使得泛型在这种情况下无用。

2 个答案:

答案 0 :(得分:1)

这很奇怪,Car类应该拥有像&#34;品牌&#34;类型CarBrand而不是使用这种通用形式。例如:

class Car {
  let brand: CarBrand

  init(brand: CarBrand) {
    self.brand = brand
  }
}

class Employee {
  var car: Car

  init(car: Car) {
    self.car = car
  }
}

let employeeOne = Employee(car: Car(brand: BMW()))
let employeeTwo = Employee(car: Car(brand: Mercedes()))

顺便说一句,将CarBrand定义为协议可能更好。

答案 1 :(得分:0)

似乎你对它过分思考,因为这种情况下不需要声明泛型变量,你可以简单地删除Car类并声明{{ 1}}属性-in car class-类型Employee

CarBrand

或者,如果需要class CarBrand { } class Bmw: CarBrand { } class Mercedes: CarBrand { } class Employee { var car: CarBrand? } let employee = Employee() employee.car = Mercedes() 课程,那么我建议您关注user5685969's answer