Ответ 1
protocol Elem {}
extension Int: Elem {}
extension String: Elem {}
extension Bool: Elem {}
let arr = [Elem]()
У меня есть требование, когда мне нужно создать массив, значения которого могут быть только String, Int или boolean. Компилятор Swift должен жаловаться, если я попытался добавить Double или любой другой тип значения.
protocol Elem {}
extension Int: Elem {}
extension String: Elem {}
extension Bool: Elem {}
let arr = [Elem]()
Вы можете сделать это, объявив фиктивный протокол
protocol SpecialType {}
и совместим запрошенные типы с этим протоколом
extension String : SpecialType{}
extension Int : SpecialType{}
extension Bool : SpecialType{}
Теперь компилятор жалуется, если вы попытаетесь добавить Double
let specialDict : [String:SpecialType] = ["1" : "Hello", "2": true, "3": 2.0]
// value of type 'Double' does not conform to expected dictionary value type 'SpecialType'