База Hintsage

Протоколы и generics

Protocols, extensions, associated types и generic constraints.

Практика

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

Разберите последствие наследования соответствия: почему 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" }
}

В коде обобщённая функция принимает неизвестный конкретный тип. За счёт какого требования протокола вызов 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)
}
Программирование SwiftПротоколы и genericsРазработчик приложений для iOS

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