Swift枚举器空集合实现探究:自定义方法是否需提前判空?
关于Swift集合内置方法空集合处理的疑问解答
先贴出你的示例代码:
struct Land { // … let council: Council let size: Int } extension Collection<MyModel> { func lands(in council: Council, above size: Int) -> [Land] { guard isEmpty == false else { return [] } filter { $0.council == council && $0.size > size } } }
针对你的疑问逐一解答:
是否无需手动判空?
完全不需要。Swift内置的filter、first(where:)等集合方法本身就已经处理了空集合的场景,直接调用即可:空集合调用filter会返回空数组,调用first(where:)会返回nil,和你手动判空返回的结果完全一致。first(where:)文档标注空集合时复杂度为O(0),是跳过循环还是进入循环后立即结束?
是直接跳过循环。这类内置方法的底层实现会先检查集合是否为空,一旦判定为空,就直接返回结果,不会执行遍历元素的循环逻辑,所以时间复杂度是O(0)。提前判断空集合再调用枚举器是否有收益?
没有任何收益,反而属于冗余代码。一方面,内置方法已经在底层做了更高效的空集合检查;另一方面,去掉手动判空能让代码更简洁,减少不必要的分支逻辑,提升可读性。
内容的提问来源于stack exchange,提问作者Heuristic
相关产品推荐
相关产品推荐

