Swift字符串&數(shù)組&字典

字符串

字符串在任何的開發(fā)中使用都是非常頻繁的

OC和Swift中字符串的區(qū)別

? 1. 在OC中字符串類型時(shí)NSString,在Swift中字符串類型是String

? 2. OC中字符串@””,Swift中字符串””

使用 String 的原因

? 1.String 是一個(gè)結(jié)構(gòu)體,性能更高

? 2. NSString 是一個(gè) OC 對(duì)象,性能略差

? 3. String 支持直接遍歷

? 4. Swift 提供了 String 和 NSString 之間的無縫轉(zhuǎn)換

定義不可變字符

let str = "hello world"

?遍歷字符串

for c in str.characters {

print(c)

}

定義可變字符

var strM = "hello swift"

獲取字符串的長(zhǎng)度

先獲取字符集合 在獲取集合的count屬性

let count = str.characters.count

字符串的拼接

let str3 = str + strM

字符串和其它數(shù)據(jù)類型的拼接

let name = "lwy"

let age = 18

//OC中是 NSString *info = [NSString stringWithFormat:@"my name is %@, age is %d", name, age];

let info = "my name is (name),age is (age)"

字符串的格式化 比如時(shí)間格式 想要把時(shí)間格式顯示為 xx:xx

let min = 30

let second = 4

// swift中數(shù)組可以存儲(chǔ)基本數(shù)據(jù)類型 字典也可以 但是在OC中不可以

// %0ad: a是一個(gè)數(shù)字, 表示如果數(shù)字位數(shù)不足a位的話, 數(shù)字前面加0, 補(bǔ)足a位, 如果超過a位, 則前面什么都不加;例如 %02d 表示的是如果數(shù)字不足兩位的話前面補(bǔ)0 ,補(bǔ)足位兩位 ,如果數(shù)字超過兩位, 則什么都不補(bǔ), %03d表示不足3位的話前面補(bǔ)0 ,補(bǔ)足為3位

let time = String(format:"%03d:%02d", arguments:[min,second])

字符串的截取

Swift中提供了特殊的截取方式 該方式非常麻煩 Index創(chuàng)建較為麻煩 簡(jiǎn)單的方式是將String轉(zhuǎn)成NSString來使用 在標(biāo)識(shí)符后加:as NSString即可

let urlString = "www.baidu.com"

//把urlString轉(zhuǎn)為NSString再截取字符串 截取之后的字符串是String類型 不是NSString

let header = (urlString as NSString).substring(to: 3)//截取www字符串

let middle = (urlString as NSString).substring(with: NSMakeRange(4, 5))//截取baidu字符串

let footer = (urlString as NSString).substring(from: 10)

swift截取方式

let headerIndex = urlString.index(urlString.startIndex, offsetBy: 3)

let header2 = urlString.substring(to: headerIndex)

let footerIndex = urlString.index(urlString.endIndex, offsetBy: -3)

let footer2 = urlString.substring(from: footerIndex)

let startIndex = urlString.index(urlString.startIndex, offsetBy: 4)

let endIndex = urlString.index(urlString.startIndex, offsetBy: 9)

let range2 = Range(startIndex..

let middle2 = urlString.substring(with: range2)



數(shù)組

數(shù)組(Array)是一串有序的由相同類型元素構(gòu)成的集合,數(shù)組中的集合元素是有序的简软,可以重復(fù)出現(xiàn), swift數(shù)組類型是Array伯病,是一個(gè)泛型集合 必須告訴數(shù)組存放的是什么類型

數(shù)組的定義

定義不可變數(shù)組 let修飾的數(shù)組就是不可變數(shù)組

let array = ["lwy","zym","rx"]// 點(diǎn)擊alt鍵可以看到他的類型是 array:[String]類型 所以也可以寫成這樣

let arr :[String] = ["132"]

定義存放any類型的不可變數(shù)組

let arrayAny :[Any] = ["123","456",18,20]

或者

let arrAny = ["132","123",30] as [Any]

定義可變數(shù)組

OC中是[NSMutableArray array];方式創(chuàng)建的, 在swift中創(chuàng)建對(duì)象的方式是: 類型() 的形式創(chuàng)建, 比如UIView() 創(chuàng)建一個(gè)view,可以得出數(shù)組的話應(yīng)該是 var arrM = Array()創(chuàng)建, 但是會(huì)發(fā)現(xiàn)這樣寫的話是會(huì)報(bào)錯(cuò)的, 因?yàn)閿?shù)組是一個(gè)泛型集合, 必須告訴數(shù)組應(yīng)該存放什么樣的類型

//var arrM = Array() 錯(cuò)誤的寫法

var arrayM = Array() // 正確的寫法 定義一個(gè)存放字符類型的可變數(shù)組 不過很少用到

var arrM =String// 這種寫法比較多一些 定義存放any類型的可變數(shù)組 var arrayMAny =Any

數(shù)組的操作

增加元素

arrayM.append("lwy")

arrayM.append("zhangsan")

arrayM.append("lisi")

arrayM.append("wangwu")

arrayM.append("zhouliu")

arrayM.append("shengqi")

修改元素 直接賦值給相應(yīng)的下標(biāo)

arrayM[0] = "wangwu"

arrayM

刪除元素 會(huì)返回刪除的數(shù)據(jù)

let one = arrayM.remove(at: 1)

arrayM

let last = arrayM.removeLast()

獲取某個(gè)下標(biāo)的元素

arrayM[0]

array[0]

遍歷數(shù)組

1.需要用到下標(biāo)

for i in 0..

print(arrayM[i])

}

2.不需要用到下標(biāo)

for name in arrayM {

print(name)

}

3.不常見的 比如 只是想遍歷數(shù)組中的前兩個(gè)元素

for i in 0..<2 {

print(arrayM[i])

}

或者

for name in arrayM[0..<2] {

print(name)

}

遍歷數(shù)組的同時(shí)獲取下標(biāo)值

let names = ["why", "yz", "lnj", "lmj"]

for (index, name) in names.enumerated() {

print(index)

print(name)

}

數(shù)組的合并

比如想把a(bǔ)rray不可變數(shù)組和arrayM數(shù)組合并在一塊 如果用OC的方法的話應(yīng)該是這樣的

for name in array {

arrayM.append(name)

}

swift的話可以直接相加

let result = arrayM + array

不過需要注意的是只有兩個(gè)數(shù)組的類型是完全一樣的時(shí)候才可以相加合并 不同類型的話是不能相加合并的 比如一個(gè)數(shù)組中存放的是數(shù)字 另一個(gè)數(shù)組存放的是字符 這時(shí)候這兩個(gè)數(shù)組是不能相加的

不建議一個(gè)數(shù)組中存放多種類型的數(shù)據(jù)

var array3 :[Any] = [2, 3, "why"]

var array4 :[Any] = ["yz", 23]

array3 + array4


字典?

跟OC中一樣 都是無序的逛球,字典允許按照某個(gè)鍵來訪問元素

字典是由兩部分集合構(gòu)成的蕴忆,一個(gè)是鍵(key)集合仗岖,一個(gè)是值(value)集合

鍵集合是不能有重復(fù)元素的金麸,而值集合是可以重復(fù)的擎析,鍵和值是成對(duì)出現(xiàn)的

Swift字典類型是Dictionary,也是一個(gè)泛型集合

定義一個(gè)不可變字典

let dict1 : [String : Any] = ["name" : "why", "age" : 18]

可以理解為轉(zhuǎn)換為String:Any類型的字典

let dict2 = ["name":"lwy","age":18] as [String : Any]

定義可變字典

var dictM =String : Any

可變字典的操作

增加元素

dictM["name"] = "lwy"

dictM["age"] = 18

dictM["height"] = 170.0

dictM

刪除數(shù)據(jù) 會(huì)返回刪除的value

let nameValue = dictM.removeValue(forKey: "height")

dictM

修改數(shù)據(jù)

dictM["name"] = "yw"

或者

dictM.updateValue("yu", forKey: "name")

可以看到修改數(shù)據(jù)和增加數(shù)據(jù)的方法是一樣的 也就是當(dāng)我們修改一個(gè)不存在的key的數(shù)據(jù)時(shí) 就會(huì)增加一個(gè)相應(yīng)key的數(shù)據(jù)


查詢字典

dictM["name"]

字典的遍歷

遍歷所有的值

for value in dict1.values {

print(value)

}

遍歷所有的key

for key in dict1.keys {

print(key)

}

遍歷所有的鍵值對(duì)

for (key, value) in dict1 {

print(key)

print(value)

}

字典的合并

var dictM1 = ["name":"lwy","age":20] as [String : Any]

var dictM2 : [String : Any] = ["height":18 ,"phoneNum":"10086"]

字典的合并不能像數(shù)組那樣直接相加合并 即使字典的類型完全一致也不可以相加

dictM1 + dictM2 dictM1和dictM2是完全一樣的類型 但是也不能相加 這樣是錯(cuò)誤的

for (key, value) in dictM1 {

dictM2[key] = value

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挥下,一起剝皮案震驚了整個(gè)濱河市揍魂,隨后出現(xiàn)的幾起案子桨醋,更是在濱河造成了極大的恐慌,老刑警劉巖现斋,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喜最,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡步责,警方通過查閱死者的電腦和手機(jī)返顺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔓肯,“玉大人遂鹊,你說我怎么就攤上這事≌岚” “怎么了秉扑?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)调限。 經(jīng)常有香客問我舟陆,道長(zhǎng),這世上最難降的妖魔是什么耻矮? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任秦躯,我火速辦了婚禮,結(jié)果婚禮上裆装,老公的妹妹穿的比我還像新娘踱承。我一直安慰自己,他們只是感情好哨免,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布茎活。 她就那樣靜靜地躺著,像睡著了一般琢唾。 火紅的嫁衣襯著肌膚如雪载荔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天采桃,我揣著相機(jī)與錄音懒熙,去河邊找鬼。 笑死普办,一個(gè)胖子當(dāng)著我的面吹牛煌珊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泌豆,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼吏饿!你這毒婦竟也來了踪危?” 一聲冷哼從身側(cè)響起蔬浙,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贞远,沒想到半個(gè)月后畴博,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蓝仲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年俱病,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袱结。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亮隙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出垢夹,到底是詐尸還是另有隱情溢吻,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布果元,位于F島的核電站促王,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏而晒。R本人自食惡果不足惜蝇狼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望倡怎。 院中可真熱鬧迅耘,春花似錦、人聲如沸诈胜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽焦匈。三九已至血公,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缓熟,已是汗流浹背累魔。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留够滑,地道東北人垦写。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像彰触,于是被迫代替她去往敵國(guó)和親梯投。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容