Swift data范围截取问题

文章目录

  • 一、截取字符串的几种方法
    • [1. 截取前几位](#1. 截取前几位)
    • [2. 截取后几位](#2. 截取后几位)
    • [3. subData](#3. subData)
    • [4. 下标截取](#4. 下标截取)
  • [二、subData(in:) 报错 EXC_BREAKPOINT](#二、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都定义了下标取值

相关推荐
大熊猫侯佩5 小时前
Swift 6.4 的 Ref / MutableRef 大揭秘:给值类型开一扇“安全的小窗”
ios·swift·编程语言
大熊猫侯佩21 小时前
WWDC26 SwiftUI 进化之路:砸碎黑盒,彻底迎来开发自由!
ios·swiftui·swift
游戏开发爱好者81 天前
iPhone真机调试有哪些方法?一次定位推送权限问题时整理出来的几种方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
大熊猫侯佩1 天前
WWDC26 最被忽视的王炸:告别“伪并发”陷阱,Swift 6.4 的 async defer
ios·swift·编程语言
人月神话-Lee3 天前
WWDC26 深度解析:如何在 iOS 27 中打造“秒开”的相机体验
ios·swift·相机·wwdc·用户体验
Tr2e4 天前
🐱 从 0 到 1:用 Swift 手搓一个 macOS 桌面宠物(附源码)
macos·ios·swift
人月神话-Lee4 天前
【WWDC】Core AI:iOS 端侧大模型新纪元
人工智能·ios·ai·swift·wwdc·core ai
2501_916007474 天前
iOS 开发工具选择指南 从编辑器、编译器到自动化构建
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
Fatbobman(东坡肘子)4 天前
WWDC 2026 初印象:符合预期,但更务实 -- 肘子的 Swift 周报 #139
人工智能·macos·ios·swiftui·swift·wwdc