【发布时间】:2026-01-03 19:20:04
【问题描述】:
我有一个要求,我需要创建一个数组,其值只能是字符串、整数或布尔值。 如果我尝试添加 Double 或任何其他值类型,Swift 编译器应该会报错。
【问题讨论】:
标签: arrays swift dictionary
我有一个要求,我需要创建一个数组,其值只能是字符串、整数或布尔值。 如果我尝试添加 Double 或任何其他值类型,Swift 编译器应该会报错。
【问题讨论】:
标签: arrays swift dictionary
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'
【讨论】:
[String:Any]或[[String:Any]]吗?
Any 替换为SpecialType。集合Array 和Dictionary 会正确考虑。
extension Array: SpecialType where Element == String(这应该会导致编译器错误)