首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Swift 泛型之条件性符合协议

例如,Array只在其元素本身实现了Equatable协议时才符合Equatable协议,这可以通过以下Equatable上的条件性符合来表示: extension Array: Equatable where...继续上面的数组示例,总是可以在两个Equatable类型的数组上使用==运算符,例如,[Int]==[Int]将比较成功。...但是,如下情况却不行:可等式类型的数组的数组不能进行比较(例如,[[Int]]=[[Int]]将无法编译),因为即使符合Equatable协议的类型组成的数组他有==运算符,数组本身也并不符合Equable...Swift标准库中这种递归设计的一个最明显的好处是,包含Equatable类型的集合现在也可以自己进行Equatable。...func didLoadArticles(_ articles: [String : [Article]]) { // 我们现在可以比较包含Equatable的嵌套集合 // 只需使用

1.4K30

Swift学习:泛型

5.2.泛型类型约束实践 下面的泛型函数用于查找数组中某个元素的索引位置;但由于for循环里用到了对象比较"==",要确保所有的类型都适用,所以在泛型函数的中添加了类型约束,使用此泛型函数的参数必须遵循Equatable...func findIndex(of valueToFind: T, in array:[T]) -> Int?.../nil let stringIndex = findIndex(of: "Andrea", in: ["Mike", "Malcolm", "Andrea"]) //2 注意:Swift标准库定义了Equatable...所有的Swift标准类型自动支持 Equatable 协议 六、关联类型 关联类型是在为协议中的某个类型提供一个占位名,其所代表的实际类型会在协议被采纳时才会被指定。...,具体代码如下: protocol Container { associatedtype Item: Equatable mutating func append(_ item

1.4K20

Swift 风味各异的类型擦除

以标准库中的Equatable协议为例。...由于所有目的都是为了根据相等性比较两个相同类型的值,因此Self元类型为其唯一要求的参数: protocol Equatable { static func ==(lhs: Self, rhs:...Self) -> Bool } 上面的代码使任何类型都可以符合Equatable,同时仍然需要==运算符两侧的值都为同一类型,因为在实现上述方法时符合协议的每种类型都必须“填写”自己的类型: extension...User: Equatable { static func ==(lhs: User, rhs: User) -> Bool { return lhs.id == rhs.id...} } 该方法的优点在于,它不可能意外地比较两个不相关的相等类型(例如 User 和 String ),但是,它也导致不可能将Equatable引用为独立协议(例如创建 [Equatable

87120

Swift 中风味各异的类型擦除

以标准库中的Equatable协议为例。...由于所有目的都是为了根据相等性比较两个相同类型的值,因此Self元类型为其唯一要求的参数: protocol Equatable { static func ==(lhs: Self, rhs:...Self) -> Bool } 上面的代码使任何类型都可以符合Equatable,同时仍然需要==运算符两侧的值都为同一类型,因为在实现上述方法时符合协议的每种类型都必须“填写”自己的类型: extension...User: Equatable { static func ==(lhs: User, rhs: User) -> Bool { return lhs.id == rhs.id...} } 该方法的优点在于,它不可能意外地比较两个不相关的相等类型(例如 User 和 String ),但是,它也导致不可能将Equatable引用为独立协议(例如创建 [Equatable]

1.6K20
领券