protocol Nameable: Equatable {
var name: String { get set }
}
struct Person: Nameable {
var name: String
}
struct Car: Nameable {
var name: String
}
Теперь я могу ограничить функцию возможностью печати элементов, соответствующих протоколу Nameable
, поскольку они относятся к одному типу?
func printNameable<T: Nameable>(_ list: [T]) {
}
Но как я могу создать этот список?Я получаю синтаксическую ошибку.
var nameableList<T: Nameable>: [T] = []
Или, если я попробую затем, я получу Протокол «Nameable» может использоваться только как общее ограничение ...
var nameables: [Nameable] = []
Я вынужден указать тип Nameable, например Person или Car, чтобы создать этот список?
В конце концов, Мне нужен массив общего протокола, который может иметь различные типы.объекты, которые я могу сравнить , если они разного типа, они разные, но если нет, я хочу сравнить их.
var nameables: [Nameable] = [Person(name: "John"), Car(name: "Ferrari")]
nameables.contains(Car(name: "Ferrari"))
(я думаю, оба типа, Person и Автомобиль должен соответствовать протоколу Equatable).