我在游乐场创建了一个简单的代码。
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需要定义类型并且要知道,但这使得泛型在这种情况下无用。
答案 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。