Что мешает протоколу наследоваться от конкретной специализации протокола с primary associated type?
База Hintsage
Протоколы и generics
Protocols, extensions, associated types и generic constraints.
Практика
Вопросы: Протоколы и generics
Тип соответствует двум протоколам с одноимёнными associated type. Как Swift различает эти требования?
Что гарантирует требование базового класса в объявлении протокола?
Рассмотрите рекурсивный протокол для узлов дерева: каким образом ограничение associated type тем же протоколом позволяет generic-коду обходить дочерние узлы без type erasure?
Как generic-код доказывает, что associated type параметра поддерживает дополнительный протокол?
В структуре метод протокола изменяет её состояние. Почему требование должно быть помечено mutating, даже если реализация класса не меняет ссылку?
Чем отличается ограничение associated type через AnyObject от ограничения самого протокола через AnyObject?
Разберите последствие наследования соответствия: почему Child не может получить отдельное соответствие Identified с другим associatedtype?
protocol Identified {
associatedtype ID: Hashable
var id: ID { get }
}
class Base: Identified {
let id: Int
init(id: Int) { self.id = id }
}
class Child: Base { }
extension Child: Identified {
typealias ID = String
var id: String { "child" }
}
При обращении к статическому требованию протокола через generic-параметр, откуда берётся конкретная реализация?
Объясните различие между existential-протоколом с зафиксированным primary associated type и generic-параметром с тем же ограничением: что сохраняется статически?
Практическая ситуация: если обобщённый контейнер условно соответствует протоколу при соответствии его элемента, при каких условиях вложенный такой же контейнер тоже получает это соответствие?
В коде обобщённая функция принимает неизвестный конкретный тип. За счёт какого требования протокола вызов T(copying: value) допустим?
protocol Copyable {
init(copying: Self)
}
struct Note: Copyable {
let value: Int
init(copying other: Note) {
value = other.value
}
}
func clone<T: Copyable>(_ value: T) -> T {
T(copying: value)
}
К чему приводит добавление в extension соответствия типа из чужой библиотеки протоколу, которым владеет текущий модуль?
При передаче значения any-протокола в generic-функцию каким образом Swift связывает его скрытый конкретный тип с generic-параметром?
Через existential-значение протокола вызывается реализация метода из расширения или одноимённый метод конкретного типа, если этот метод не объявлен требованием протокола?
Ситуация: тип объявляет соответствие протоколу только в extension. Почему generic-функция всё равно принимает его как параметр с ограничением этим протоколом?
Что даёт объявление primary associated type при использовании протокола как existential-типа?
Почему новое обязательное требование нельзя добавить в extension уже объявленного протокола?
В generic-функции параметр ограничен составным протоколом: можно ли считать associated types из этих протоколов одним и тем же типом без явного ограничения равенства?
Из-за чего метод в ограниченном расширении generic-типа недоступен в коде, где соответствующее ограничение не доказано?
Показано 1–20 из 50