数组越界判定,这样更优雅

2023-03-08 15:11:06 浏览数 (1)

目录

  • 背景
  • 优雅的解决方法
    • 验证越界使用
    • 验证常规使用
  • 结论

背景

在使用数组(swift)的编码过程中,不让程序崩溃是基本的要求,特别是在团队合作中时。

如果直接下面代码,会出现什么结果:

代码语言:javascript复制
 private func collectionSafeBoundsTest1() {
        let arr = [0, 1, 2, 3]
        print(arr[100])
    }

运行后会发现程序崩溃了:Fatal error: Index out of range

如果每次使用数组时都判断一次是否超出下标边界,那么编码看起来会比较繁琐。有什么好的办法可以处理这种情况并且简化编码吗?

答案是:YES!

优雅的解决方法

可以通过使用扩展的方式:给 Collection 协议添加扩展方法。新建 swift 文件 Collection Ex.swift ,添加如下代码:

代码语言:javascript复制
import Foundation

extension Collection {
    subscript(safe index:Index)->Element? {
        return indices.contains(index) ? self[index] : nil
    }
}

验证越界使用

然后在使用数组时,通过下面方式使用:

代码语言:javascript复制
  private func collectionSafeBoundsTest2() {
        let arr = [0, 1, 2, 3]
        guard let ele = arr[safe: 100] else {
            print("下标超出数组边界!")
            return
        }
        print(ele)
    }

运行后不会崩溃,程序输出下标超出数组边界

验证常规使用

再验证下正常使用情况:

代码语言:javascript复制
	    let arr = [0, 1, 2, 3]
        guard let ele = arr[safe: 1] else {
            print("下标超出数组边界!")
            return
        }
        print(ele)
    }

运行后输出 1,符合预期,程序也不会再崩溃了!

结论

通过给 Collection 协议添加扩展方法这种方式,可以更便捷也更安全的使用数组了!

0 人点赞