iOS摸鱼周报 第三十五期

本期iOS摸鱼周报聚焦开发Tips,探讨count vs isEmpty的差异,深入解析Swift中struct和class的区别以及值类型与引用类型的影响。同时分享优秀博客资源,推荐学习戴铭的Swift小册子,并提到了2021年黑五特惠活动。还介绍了用于清理重复照片的工具PhotoSweeper。
摘要由CSDN通过智能技术生成

本期概要

  • Tips:count vs isEmpty
  • 面试模块:Swift 中 struct 和 class 的区别,值类型和引用类型的区别。
  • 优秀博客:本期继续介绍几个优秀的 Swift 开源库。
  • 学习资料:戴铭的 Swift 小册子。
  • 开发工具:PhotoSweeper,一款快速而强大的重复照片清理器。

开发Tips

整理编辑:zhangferry

count vs isEmpty

通常在判断一个字符串或者数组是否为空的时候有两种方式:count == 0 或者 isEmpty。我们可能会认为两者是一样的,isEmpty 内部实现就是 count == 0。但在 SwiftLint 的检验下,会强制要求我们使用使用 isEmpty 判空。由此可以判断出两者肯定还是存在不同的,今天就来分析下两者的区别。

count 和 isEmpty 这两个属性来源于 Collection,count 表示数量,这个没啥特别的,需要注意的是isEmpty的实现。在标准库中,它的定义是这样的:

swift extension Collection { var isEmpty: Bool { startIndex == endIndex } }

集合的首索引和尾索引相等,则表示为空,这里只有一个比较,复杂度为 O(1)。

大部分集合类型都是走的该默认实现,但也有一些特定的集合类型会重写该方法,比如 Set

swift extension Set { var isEmpty: Bool { count == 0 } }

那为啥会出现两种不同的情况呢,我们再看 Collection 里对 count 的说明。

Complexity: O(1) if the collection conforms to RandomAccessCollection; otherwise, O(n), where n is the length of the collection.

所以对于遵循了RandomAccessCollection 协议的类型,其count获取是 O(1) 复杂度,像是 Array;对于未遵循的类型,比如 String,其 count 复杂度就是 O(n),但是isEmpty

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值