当前位置: 首页 > news >正文

Swift data范围截取问题

文章目录

  • 一、截取字符串的几种方法
    • 1. 截取前几位
    • 2. 截取后几位
    • 3. subData
    • 4. 下标截取
  • 二、subData(in:) 报错 EXC_BREAKPOINT

一、截取字符串的几种方法

1. 截取前几位

mobileID.prefix(32)

2. 截取后几位

mobileID.suffix(3)

3. subData

data.subdata(in: 0..<4)

4. 下标截取

data[0..<4]

二、subData(in:) 报错 EXC_BREAKPOINT

原因:Data值(或一般的集合)的索引不一定是从零开始的。

这里有一段代码

let array:[UInt8] = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06]
let data = Data(bytes: array)//问题:请问以下六个的结果是?
data.subdata(in: 3...4).forEach{ print("a \($0)") }
data.subdata(in: 3..<3).forEach{ print("b \($0)") }
data.subdata(in: 3..<4).forEach{ print("c \($0)") }
data[3...4].forEach{ print("A \($0)") }
data[3..<3].forEach{ print("B \($0)") }
data[3..<4].forEach{ print("C \($0)") }

结果:

data.subdata(in: 3...4).forEach{ print("a \($0)") }// 报错 Cannot convert value of type 'ClosedRange<Int>' to expected argument type 'Range<Data.Index>' (aka 'Range<Int>')
data.subdata(in: 3..<3).forEach{ print("b \($0)") }// 空值
data.subdata(in: 3..<4).forEach{ print("c \($0)") }// c 4
data[3...4].forEach{ print("A \($0)") }// A 4 A 5
data[3..<3].forEach{ print("B \($0)") }// 空
data[3..<4].forEach{ print("C \($0)") }// C 4

data.subdata(in: 3…4) 报错原因:
在这里插入图片描述
此方法要求的传值为Range<Data.Index> (Data.Index其实就是Int)

而 3…4 实际上是ClosedRange
在这里插入图片描述

我们知道,Swift3.0以后,Range有四种:
请添加图片描述

而这四种Range并不能在互相之间直接转换
因此 data.subdata(in: 3…4) 就会报上述错误

为什么下标取值既能用CountableClosedRange,也能用CountableRange?

翻阅Swift源代码就知道原因
Swift对四种Range都定义了下标取值
请添加图片描述

http://www.lryc.cn/news/180350.html

相关文章:

  • PICO首届XR开发者挑战赛正式启动,助推行业迈入“VR+MR”新阶段
  • 【计算机网络】应用层协议原理
  • buuctf-[WUSTCTF2020]CV Maker
  • 数据库表操作详解
  • axios配置代理ip
  • Apache Commons Pool2 池化技术
  • 二叉树的最近公共祖先LCA
  • AWS SAA知识点整理(作成中)
  • C++模板大全(持续更新,依不同网站整理而成)
  • 《CTFshow-Web入门》10. Web 91~110
  • 计组--总线
  • Git中的HEAD
  • 软件设计师_数据库系统_学习笔记
  • 毛玻璃态计算器
  • 常说的I2C协议是干啥的(电子硬件)
  • C/C++进程超详细详解【中部分】(系统性学习day07)
  • S型速度曲线轨迹规划(约束条件为速度和位移)
  • 从零手搓一个【消息队列】实现数据的硬盘管理和内存管理(线程安全)
  • 自动驾驶中的感知模型:实现安全与智能驾驶的关键
  • 【CVPR 2023】DSVT: Dynamic Sparse Voxel Transformer with Rotated Sets
  • MySQL超入门(1)__迅速上手掌握MySQL
  • 四、浏览器渲染过程,DOM,CSSDOM,渲染,布局,绘制详细介绍
  • 2021-06-10 51单片机设计一个蜂鸣器报警电路每秒
  • D‘Agostino-Pearson正态检验|偏度skewness和峰度kurtosis
  • 基于树莓派CM4制作img系统镜像批量制作TF卡
  • 【中秋国庆不断更】OpenHarmony组件内状态变量使用:@State装饰器
  • 【Java 进阶篇】MySQL多表关系详解
  • 【开发篇】十、Spring缓存:手机验证码的生成与校验
  • 【Aurora 8B/10B IP(1)--初步了解】
  • C++ vector容器的介绍与使用