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) //問題:請問以下六個(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) 就會報(bào)上述錯(cuò)誤
為什么下標(biāo)取值既能用CountableClosedRange,也能用CountableRange?
翻閱Swift源代碼就知道原因Swift對四種Range都定義了下標(biāo)取值
到此這篇關(guān)于Swift data范圍截取問題的文章就介紹到這了,更多相關(guān)Swift data范圍截取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Swift調(diào)用Objective-C編寫的API實(shí)例
這篇文章主要介紹了Swift調(diào)用Objective-C編寫的API實(shí)例,介紹的比較全面和詳細(xì),對Objective-C代碼的重復(fù)利用有極大好處,的朋友可以參考下2014-07-07Swift?Error重構(gòu)的基礎(chǔ)示例詳解
這篇文章主要為大家介紹了Swift?Error基礎(chǔ)錯(cuò)誤處理的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11swift中AnyObject和Any的介紹與區(qū)別詳解
雖然使用swift開發(fā)了一段時(shí)間,但是感覺對一些基礎(chǔ)的東西了解不是比較透徹,在查詢了許多資料以后還是打算自己動手記錄一下,下面這篇文章主要給大家介紹了關(guān)于swift中AnyObject和Any的介紹與區(qū)別的相關(guān)資料,需要的朋友可以參考下。2017-12-12Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)
這篇文章主要為大家介紹了Swift之for循環(huán)的基礎(chǔ)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06SwiftUI?List在MacOS中的性能優(yōu)化示例
這篇文章主要為大家介紹了SwiftUI?List在MacOS中的性能優(yōu)化示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Swift仿微信語音通話最小化時(shí)后的效果實(shí)例代碼
這篇文章主要介紹了Swift仿微信語音通話最小化時(shí)后的效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03