Разница между двоеточием (:) и eqaul для оператора (==) - Generic Where Clause: Я хочу, чтобы Array условно соответствовал протоколу

Мне нужно краткое и четкое объяснение того, почему это происходит.

Я использовал "Условно соответствующий протоколу", который представлен в быстрой документации ( ссылка)

я хочу Array тип, чтобы соответствовать моему Test Протокол, если элементы в массиве соответствуют этому протоколу.

protocol Test {
    var result : String {get}
}

extension Int: Test {
    var result: String {
        return "int"
    }
}

extension Array: Test where Element: Test {
    var result: String {
        return "array"
    }
}

Затем я объявил экземпляр массива следующим образом.

let array1 = Array<Test>()

print(array1 is Test) // **false**

Я думал, что array1 должен соответствовать Test протокол (true), но не было найдено.

Затем я попробовал следующий способ расширения, и это сработало.

extension Array: Test where Element == Test {
    var result: String {
        return "array"
    }
}

let array2 = Array<Test>()

print(array2 is Test) // **true**

я думал Array<Test>() означает " массив, который может принимать элементы, соответствующие Test протокол ", так что этот массив должен был соответствовать тому же протоколу, как я объявил в первом расширении.


Вопрос
1. Разница между толстой кишкой (:) и оператор равенства (==)
- : означает только соответствующий тип / == значит идентичный тип?
2. Объяснение, как это работает, когда я объявляю экземпляр массива как Array<Test>()

0 ответов

Другие вопросы по тегам