Swift data范围截取问题

news2024/11/19 5:56:38

文章目录

  • 一、截取字符串的几种方法
    • 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.coloradmin.cn/o/1046747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

港科夜闻|香港科技大学颁授荣誉大学院士予六位杰出人士

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科技大学颁授荣誉大学院士予六位杰出人士。他们分别为陈晓峰先生、郑志刚博士、冯英伟先生、李慧诗女士、姚珏女士及叶毓强教授(按姓氏英文字母排序)。荣誉大学院士颁授典礼由香港科大校董会主席沈向洋教授和香港科大…

开发APP的费用是多少

开发一款APP的费用可以因多种因素而异&#xff0c;包括项目的规模、功能、复杂性、技术选择、地理位置等。北京是中国的大城市&#xff0c;APP开发的费用也会受到北京的物价水平和市场竞争的影响。以下是一些可以影响APP开发费用的因素&#xff0c;希望对大家有所帮助。北京木奇…

Codeforces Round 889 (Div. 2)A~C1题解

A. Dalton the Teacher 题目分析&#xff1a; 模拟&#xff0c;写出两个就能找出规律&#xff1a;坐在自己位子上的小孩会不高兴&#xff0c;所以统计下来cnt 发现cnt为奇数是(cnt1)/2次就能换成要求&#xff0c;偶数就是cnt/2 #include<bits/stdc.h> #pragma GCC op…

Silicon labs BG22蓝牙开发记录(一)

本篇内容适用初学者使用&#xff0c;主要介绍如何快速了解Siliconlabs EFR32BG22蓝牙芯片相关的软件资源和硬件资源&#xff0c;结合了我作为FAE 支持的一些个人看法&#xff0c;便于使用者快速入门&#xff0c;加速你们的产品实施。 本系列分为&#xff1a; Siliconlabs BG22…

世界前沿技术发展报告2023《世界信息技术发展报告》(一)世界信息技术及产业发展重要动向

&#xff08;一&#xff09;世界信息技术及产业发展重要动向 1. 概述2. 半导体技术水平持续进步&#xff0c;行业内部开始新一轮调整2.1 全球主要经济体加强半导体技术能力建设&#xff0c;推动厂商扩产2.2 先进制程技术持续发展&#xff0c;先进封装技术崭露头角2.3 消费电子半…

幸存者偏差

幸存者偏差&#xff08;英语&#xff1a;survivorship bias&#xff09;&#xff0c;另译为“生存者偏差”&#xff0c;是一种认知偏差。其逻辑谬误表现为过分关注于目前人或物“幸存了某些经历”然而往往忽略了不在视界内或无法幸存这些事件的人或物。 幸存者偏差最早来源于第…

品牌出海的关键步骤:市场定位与创新营销

现如今越来越多的企业开始将目光投向海外市场&#xff0c;寻求品牌出海的机会。品牌出海是指企业将自身品牌拓展至海外市场&#xff0c;通过进军国际市场来实现增长和发展。然而&#xff0c;面对不同的文化、市场环境和消费者需求&#xff0c;成功的品牌出海需要制定有效的策略…

apifox怎么测试API,你学会了吗?

背景 由其他的team做的项目&#xff0c;配置到一个新的环境下。由于项目需要与别的公司的项目接连&#xff0c;所以需要创建公开的API接口&#xff0c;利用apifox来进行测试&#xff08;postman&#xff0c;jmeter都可以&#xff09;。此次利用apifox来创建测试API接口的测试 …

小程序添加隐私保护指引弹框(包含配置隐私保护指引方法)

实现效果&#xff1a; 目录 前言一、 涉及到使用了隐私接口的小程序必须在「小程序管理后台」设置《小程序用户隐私保护指引》&#xff0c;微信一共提供了 4 个接口给开发者使用&#xff0c;分别是:二、 配置隐私协议弹框组件三、在页面中使用协议弹窗组件四、uniapp开发&#…

自己开发一个VSCode插件,快速生成Flex布局代码

插件CSS Flex 安装地址&#xff1a;VSCode插件安装 GitHub&#xff1a;https://github.com/xutao-o/css-flex-code &#x1f4a1;介绍 这是一个快捷生成CSS Flex布局代码的VS Code插件&#xff0c;类似于Google开发者控制台里的Flex布局工具&#xff0c;就是看谷歌的布局工具…

stm32之软件模拟IIC

在之前的文章中分析过在52上的IIC时序&#xff0c;也测试过stm32的自带IIC功能&#xff0c;这里大致写下如何模拟stm32上的IIC。实验硬件基于stm32f103c8t6 废话不多说&#xff0c;先直接上代码。 一、源码 头文件 #include "stdint.h" #include "gpio.h&quo…

编译u-boot的过程中遇到的问题

我使用的是uboot-2016.tar.bz2这个压缩包&#xff0c;将其解压之后进入这个文件夹&#xff0c;里面所包含的文件如下图所示。 这个文件夹下包含着三个Shell脚本文件&#xff0c;都是可执行的&#xff0c;打开其中一个其内容如下。 根据自己的开发板类型决定执行哪一个Shell脚…

基于Python实现的快递管理系统源码+数据库,采用PyQt6实现GUI界面

快递管理系统 完整代码下载地址&#xff1a;快递管理系统 介绍 通过对传统的快递收发流程进行分析&#xff0c;完成网上快递管理系统的分析设计与开发&#xff0c;使客户能方便在网站上查询自己的快件信息以及网上寄件&#xff0c;同时管理员又能对每天的收到快件进行登记和…

一步步教你如何搭建K8S集群

一、环境配置 三台CentOS7虚拟机&#xff0c;默认配置&#xff0c;内存2GB、处理器2核心。 先更新下系统 1 sudo yum update 2 sudo yum upgrade 二、安装并启动 docker 1 yum -y install wget 2 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo …

Unity中Shader需要了解的点与向量

文章目录 前言一、点和向量的区别二、向量加法减法1、向量加法2、向量减法(可以把向量减法转化为向量加法) 三、向量的模四、标量![在这里插入图片描述](https://img-blog.csdnimg.cn/03df81df3cdf47989a11605d5f5e7da5.png)1、向量与标量的乘法 前言 Unity中Shader了解使用的…

3个变化3秒区别MT4和MT5

自从mt5上市以来&#xff0c;很多投资者无法快速区别MT4和MT5&#xff0c;其实很简单&#xff0c;通过3个变化anzo capital昂首资本3秒一眼区别。 外观区别 很难从视觉上定义MT4和MT5的区别。在新的平台版本中&#xff0c;开发者专注于平台功能的升级&#xff0c;几乎没有改变…

node 解决多版本配置 error:03000086:digital 引起的问题 已解决

在日常后端工作中&#xff0c;难免会安装前端的项目&#xff0c;今天有旧项目需要维护&#xff0c;但是 提示 node版本过高&#xff0c;或者不是长维护版本&#xff0c;部分分享说&#xff0c;加 opensll 过滤能解决&#xff0c;但是 还是不行&#xff0c;索性来这个 底朝天的找…

阿里云服务器共享型和企业级独享有什么区别?

阿里云ECS云服务器共享型和企业级有什么区别&#xff1f;企业级就是独享型&#xff0c;共享型和企业级云的主要区别CPU调度模式&#xff0c;共享型是非绑定CPU调度模式&#xff0c;企业级是固定CPU调度模式&#xff0c;共享型云服务器在高负载时计算性能可能出现波动不稳定&…

XC1336 高侧过压保护器 30V过压保护IC 可做OVP、高压开关

XC1336是一个高压30V过电压保护器&#xff08;OVP&#xff09;&#xff0c;其电阻较低&#xff0c;只需改变外部连接。它可以用作OVP设备或高压开关。 XC1336由一个电荷泵、一个可配置的功率MOSFET、一个电压参考、一个栅极驱动器和一些逻辑和保护模块组成。 XC1336可以对输入浪…

Linux发行版X华为鲲鹏openEuler

前言 作为硬件和软件之间的桥梁&#xff0c;我接触的最多的就是Windows和Centos&#xff0c;还记得最初的鸟哥的Linux私房菜&#xff0c;而Centos即将停止维护更新&#xff08;Centos7维护到2024&#xff09;&#xff0c;对于个人学习来说没有任何影响&#xff0c;但是对于企业…