(Пустой) Протокол соответствия теста - PullRequest
0 голосов
/ 10 февраля 2019

Вот кое-что, что немного озадачивает меня.

Я определил этот пустой протокол для целей тестирования:

protocol Doable {
}

Протокол пуст, я ожидаю, что любой возможный тип соответствует этому.

Но когда я использую этот код для выполнения простого теста, соответствующего протоколу, используя два способа.

if let _ = MyType.self as? Doable {
    print("Doable match OK!!")
} else {
    print("That doesn't match!!")
}

if MyType.self is Doable.Type {
    print("Doable match OK!!")
} else {
    print("That doesn't match!!")
}

В результате я всегда получаю следующее: ЭТО НЕ СООТВЕТСТВУЕТ .

Это то, что должно произойти?

Или мои тесты или ожидания неверны?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Тип Swift соответствует протоколу, только если он явно его реализует.

Для добавления соответствия протокола, например, стандартному типу (например, String), вы можете:

extension String: Doable {}
let aString = ""
if aString is Doable {
 print("it works")
}

Подробнее о том, как это работает, см. В документации Apple по протоколам

. Вы также можете взглянуть на условное соответствие , функцию Swift 4, котораяможет помочь вам. Условное соответствие

Примечание :

В реальном коде этот тест бесполезен, поскольку компилятор Swift в этом случае знает, что String - выполнимо

0 голосов
/ 10 февраля 2019

Даже если тип соответствует требованиям протокола, его соответствие должно быть явно указано.

...