Как создать массив или словарь, значениями которого могут быть только String, Int и Boolean?

У меня есть требование, когда мне нужно создать массив, значения которого могут быть только String, Int или boolean. Компилятор Swift должен жаловаться, если я попытался добавить Double или любой другой тип значения.

Ответ 1

protocol Elem {} 
extension Int: Elem {}  
extension String: Elem {} 
extension Bool: Elem {} 
let arr = [Elem]()

Ответ 2

Вы можете сделать это, объявив фиктивный протокол

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'