База Hintsage

Протоколы и generics

Protocols, extensions, associated types и generic constraints.

Практика

Вопросы: Протоколы и generics

В коде нужно передать значение any Sequence в generic-функцию. Объясните, почему вызов total допустим, несмотря на наличие associated type Element.

func total<S: Sequence>(_ sequence: S) -> Int {
    sequence.reduce(0) { result, _ in result + 1 }
}

let values: any Sequence = [10, 20, 30]
let count = total(values)
Программирование SwiftПротоколы и genericsSwift-разработчик среднего уровня

Сравните ограничения на типы коллекций: почему вызов этой функции допустим для Array и Set, хотя сами типы коллекций различаются?

func combined<A: Collection, B: Collection>(
    _ first: A,
    _ second: B
) -> [A.Element]
where A.Element == B.Element {
    Array(first) + Array(second)
}

let result = combined([1, 2], Set([3, 4]))

Показано 2140 из 50