You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:03:16