Swift data范圍截取問題解決方案
一、截取字符串的幾種方法
1. 截取前幾位
mobileID.prefix(32)
2. 截取后幾位
mobileID.suffix(3)
3. subData
data.subdata(in: 0..<4)
4. 下標(biāo)截取
data[0..<4]
二、subData(in:) 報(bào)錯(cuò) EXC_BREAKPOINT
原因:Data值(或一般的集合)的索引不一定是從零開始的。
這里有一段代碼
let array:[UInt8] = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06]
let data = Data(bytes: array)
//問題:請(qǐng)問以下六個(gè)的結(jié)果是?
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)") }結(jié)果:
data.subdata(in: 3...4).forEach{ print("a \($0)") }// 報(bào)錯(cuò) 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) 報(bào)錯(cuò)原因:

此方法要求的傳值為Range<Data.Index> (Data.Index其實(shí)就是Int)
而 3…4 實(shí)際上是ClosedRange

我們知道,Swift3.0以后,Range有四種:

而這四種Range并不能在互相之間直接轉(zhuǎn)換因此 data.subdata(in: 3…4) 就會(huì)報(bào)上述錯(cuò)誤
為什么下標(biāo)取值既能用CountableClosedRange,也能用CountableRange?
翻閱Swift源代碼就知道原因Swift對(duì)四種Range都定義了下標(biāo)取值

到此這篇關(guān)于Swift data范圍截取問題的文章就介紹到這了,更多相關(guān)Swift data范圍截取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Swift中動(dòng)態(tài)調(diào)用實(shí)例方法介紹
這篇文章主要介紹了Swift中動(dòng)態(tài)調(diào)用實(shí)例方法介紹,在Swift中有一類很有意思的寫法,可以讓我們不直接使用實(shí)例來調(diào)用這個(gè)實(shí)例上的方法,而是通過類型取出這個(gè)類型的某個(gè)實(shí)例方法的簽名,然后再通過傳遞實(shí)例來拿到實(shí)際需要調(diào)用的方法,需要的朋友可以參考下2015-01-01
swift4.2實(shí)現(xiàn)新聞首頁導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了swift4.2實(shí)現(xiàn)新聞首頁導(dǎo)航,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
swift 3.0 實(shí)現(xiàn)短信驗(yàn)證碼倒計(jì)時(shí)功能
這篇文章主要介紹了swift 3.0 實(shí)現(xiàn)短信驗(yàn)證碼倒計(jì)時(shí)功能的相關(guān)資料,需要的朋友可以參考下2017-02-02
使用Swift實(shí)現(xiàn)iOScollectionView廣告無限滾動(dòng)效果(DEMO)
本文給大家分享使用Swift實(shí)現(xiàn)iOScollectionView廣告無限滾動(dòng)效果(DEMO),非常不錯(cuò),具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11
swift3.0 創(chuàng)建sqlite數(shù)據(jù)庫(kù)步驟方法
本篇文章主要介紹了swift3.0 創(chuàng)建sqlite數(shù)據(jù)庫(kù)步驟方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Flutter iOS開發(fā)OC混編Swift動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)問題填坑
這篇文章主要為大家介紹了Flutter iOS OC 混編 Swift動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)問題填坑詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07

