我需要创建一个数组,其值只能是String,Int或boolean。 如果我尝试添加Double或任何其他值类型,Swift编译器应该抱怨。
答案 0 :(得分:16)
protocol Elem {}
extension Int: Elem {}
extension String: Elem {}
extension Bool: Elem {}
let arr = [Elem]()
答案 1 :(得分:8)
您可以通过声明虚拟协议
来实现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'