class Human {
var name : String?
}
class Man : Human {
var numberOfWallets : Int?
}
class Woman : Human {
var numberOfPurses : Int?
}
protocol P {
associatedtype Person : Human
func printX(of person : Person)
func printY(of person: Person)
}
Что позволяет Human
быть его typealias
:
class C : P {
typealias Person = Human
func printX(of person: Human) {
print(person.numberOfCars)
}
func printY(of person: Human) {
print(person.name)
}
}
Как вы можете видеть, тип Person
ограничен Human
, который сам по себе является конкретным типом.Мне интересно, если это распространено.Моя интуиция подсказывает мне, что на самом деле это признак того, что мне не следует использовать протоколы, и, скорее, сами классы в порядке.
или я должен просто сделать
protocol P {
associatedtype Person
func printX(of person : Person)
func printY(of person: Person)
}
class C : P {
func printX(of person: Man) {
print(person.numberOfCars)
}
func printY(of person: Man) {
print(person.name)
}
}
, что не позволит одновременно использовать экземпляр Woman
& Man
для экземпляра C
.
Я знаю, это зависит от того, что я хочу сделать.Но мой вопрос на самом деле таков: имеет ли смысл когда-либо ограничивать ассоциированный тип конкретным типом?