前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数组越界判定,这样更优雅

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

原创
作者头像
woopDast1
发布2023-01-31 22:46:27
7490
发布2023-01-31 22:46:27
举报
文章被收录于专栏:iOSeriOSer

背景

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

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

代码语言:swift
复制
 private func collectionSafeBoundsTest1() {

        let arr = [0, 1, 2, 3]

        print(arr[100])

    }

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

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

答案是:YES!

优雅的解决方法

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

代码语言:swift
复制
import Foundation



extension Collection {

    subscript(safe index:Index)->Element? {

        return indices.contains(index) ? self[index] : nil

    }

}

验证越界使用

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

代码语言:swift
复制
  private func collectionSafeBoundsTest2() {

        let arr = [0, 1, 2, 3]

        guard let ele = arr[safe: 100] else {

            print("下标超出数组边界!")

            return

        }

        print(ele)

    }

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

验证常规使用

再验证下正常使用情况:

代码语言:swift
复制
        let arr = [0, 1, 2, 3]

        guard let ele = arr[safe: 1] else {

            print("下标超出数组边界!")

            return

        }

        print(ele)

    }

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

结论

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 优雅的解决方法
    • 验证越界使用
      • 验证常规使用
      • 结论
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档