protocol Identifiable {
associatedtype ID
func identifier() -> ID
}
protocol PersonProtocol: Identifiable {
var name: String { get }
var age: Int { get }
}
class Person: PersonProtocol {
let name: String
let age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func identifier() -> String {
return "\(name)_\(age)"
}
}
Я попытался объявить и инициализировать сохраненное свойство как let owner: PersonProtocol
в классе Car
, но оно выдало ошибку:
`PersonProtocol 'может использоваться только как обобщенный c ограничение, потому что оно имеет Self или связанные требования типа
Следовательно, я попытался выполнить следующий фрагмент кода, чтобы сделать то же самое, но я не уверен, что это правильный способ сделать это. Нужны предложения.
class Car<T: PersonProtocol>{
let owner: T
init<U: PersonProtocol>(owner: U) where U.ID == String {
self.owner = owner as! T // I am force casting `U` as `T`. is this forcecasting justified ?
}
func getID() -> String {
owner.identifier() as! String // is this forcecasting justified ?
}
}