swift簡單總結(jié)(十二)—— 集合類型之?dāng)?shù)組

版本記錄

版本號(hào) 時(shí)間
V1.0 2017.07.25

前言

我是swift2.0的時(shí)候開始接觸的,記得那時(shí)候還不是很穩(wěn)定蓝牲,公司的項(xiàng)目也都是用oc做的惦费,并不對swift很重視兵迅,我自己學(xué)了一段時(shí)間,到現(xiàn)在swift3.0+已經(jīng)出來了薪贫,自己平時(shí)也不寫恍箭,忘記的也差不多了,正好項(xiàng)目這段時(shí)間已經(jīng)上線了瞧省,不是很忙扯夭,我就可以每天總結(jié)一點(diǎn)了鳍贾,希望對自己對大家有所幫助。在總結(jié)的時(shí)候我會(huì)對比oc進(jìn)行說明交洗,有代碼的我會(huì)給出相關(guān)比對代碼骑科。
1. swift簡單總結(jié)(一)—— 數(shù)據(jù)簡單值和類型轉(zhuǎn)換
2. swift簡單總結(jié)(二)—— 簡單值和控制流
3. swift簡單總結(jié)(三)—— 循環(huán)控制和函數(shù)
4. swift簡單總結(jié)(四)—— 函數(shù)和類
5. swift簡單總結(jié)(五)—— 枚舉和結(jié)構(gòu)體
6. swift簡單總結(jié)(六)—— 協(xié)議擴(kuò)展與泛型
7. swift簡單總結(jié)(七)—— 數(shù)據(jù)類型
8. swift簡單總結(jié)(八)—— 別名、布爾值與元組
9. swift簡單總結(jié)(九)—— 可選值和斷言
10. swift簡單總結(jié)(十)—— 運(yùn)算符
11. swift簡單總結(jié)(十一)—— 字符串和字符

集合類型

swiftoc一樣藕筋,都有集合類型纵散,在oc中集合類型有:

  • 數(shù)組(NSArray/NSMutableArray
  • 字典 (NSDictionary/NSMutableDictionary
  • 集合(NSSet)

他們的優(yōu)缺點(diǎn)就不多說了,很簡單的了隐圾。在swift中同樣有數(shù)字和字典伍掀。下面就說下這幾種類型。swift中數(shù)組和字典中存儲(chǔ)的類型必須完全明確暇藏,不能把不正確的數(shù)據(jù)類型存入其中蜜笤,這也說明了我們對從數(shù)組中取值可以極大放心了。

注意swift的數(shù)組結(jié)構(gòu)在被聲明成常亮或者被傳入函數(shù)與方法中時(shí)會(huì)相對于其他類型展現(xiàn)出不同的特性盐碱,這個(gè)以后會(huì)詳加闡述把兔。


數(shù)組

數(shù)組使用有序列表存儲(chǔ)同一類型的多個(gè)值,相同的值可以多次出現(xiàn)在一個(gè)數(shù)組的不同位置上瓮顽,swiftoc中數(shù)組的定義前幾篇有所涉及县好,這里就不多說了。這里有幾點(diǎn)要注意:

  • oc中暖混,NSArrayNSMutableArray可以存儲(chǔ)任意類型的對象缕贡,不用在數(shù)組定義的時(shí)候就指定存儲(chǔ)類型,并且不提供所返回對象的任何特別的信息拣播。
  • swift中晾咪,數(shù)據(jù)值被存入某一個(gè)數(shù)組之前,類型必須明確贮配,方式就是通過顯示的類型標(biāo)注或者類型推斷谍倦,而且不是必須是class類型,整型數(shù)據(jù)也可以泪勒。例如:我們創(chuàng)建Int類型的數(shù)組昼蛀,就不能往里面添加任何和該類型不同的數(shù)據(jù),swift中的數(shù)據(jù)類型是安全的酣藻,包含的類型也必須明確曹洽。

1. 數(shù)組構(gòu)造語句

oc中一樣,swift中的數(shù)據(jù)也是使用中括號(hào)包含數(shù)值辽剧,[value1, vaule2, value3]送淆。下面看一下swift中數(shù)組的簡單定義。

    //數(shù)組定義
    var numberArr : [Int] = [1, 2, 3, 4]
    print(numberArr)
    
    var nameStrArr : [String] = ["John", "Smith"]
    print(nameStrArr)

下面看輸出結(jié)果

[1, 2, 3, 4]
["John", "Smith"]

下面看一下oc中數(shù)組的簡單定義怕轿。

    NSArray *numberArr = @[@(1), @(2), @(3), @(4)];
    NSLog(@"%@",numberArr);
    
    NSArray *nameStrArr = @[@"John", @"Smith"];
    NSLog(@"%@",nameStrArr);

下面看輸出結(jié)果

2017-07-25 10:56:33.954628+0800 JJOC[5185:1639082] (
    1,
    2,
    3,
    4
)

2017-07-25 10:56:33.954719+0800 JJOC[5185:1639082] (
    John,
    Smith
)

這里需要說一下:swift中用var表示可變數(shù)組偷崩,而oc中用NSMutableArray表示可變數(shù)組辟拷。由于swift有類型推斷機(jī)制,所以初始化不指定類型阐斜,也會(huì)被推斷出來衫冻,所以上面的代碼也可以這么寫。

    //數(shù)組定義
    var numberArr = [1, 2, 3, 4]
    print(numberArr)
    
    var nameStrArr = ["John", "Smith"]
    print(nameStrArr)

2. 訪問和修改數(shù)組

訪問可以訪問可變和不可變數(shù)組谒出,修改數(shù)組則只能修改可變數(shù)組隅俘。

通過count屬性獲取數(shù)組的數(shù)據(jù)量

先看swift

    //數(shù)組定義
    var nameStrArr : [String] = ["John", "Smith"]
    print(nameStrArr)
    print(nameStrArr.count)

下面看輸出結(jié)果

["John", "Smith"]
2

接著看oc

    NSArray *nameStrArr = @[@"John", @"Smith"];
    NSLog(@"%@",nameStrArr);
    NSLog(@"%d",nameStrArr.count);

下面看輸出結(jié)果

2017-07-25 11:12:45.626938+0800 JJOC[5193:1640931] (
    John,
    Smith
)
2017-07-25 11:12:45.626985+0800 JJOC[5193:1640931] 2

檢查數(shù)組是否為空

先看swift,有個(gè)屬性isEmpty判斷是否為空笤喳。

    var nameStrArr : [String] = ["John", "Smith"]
    print(nameStrArr)
    print(nameStrArr.count)
    if nameStrArr.isEmpty {
        print("YES")
    }
    else {
        print("NO")
    }

下面看輸出結(jié)果

["John", "Smith"]
2
NO

再看oc为居,就只能判斷數(shù)組中元素個(gè)數(shù)了。

    NSArray *nameStrArr = @[@"John", @"Smith"];
    if (nameStrArr.count == 0) {
        NSLog(@"YES");
    }
    else {
        NSLog(@"NO");
    }

下面看輸出結(jié)果

2017-07-25 11:18:47.220330+0800 JJOC[5201:1642480] NO

增加數(shù)組中的數(shù)據(jù)

swift中可以通過+以及append方法來增加數(shù)組中的數(shù)據(jù)杀狡。下面看代碼蒙畴。

    var nameStrArr : [String] = ["John", "Smith"]
    nameStrArr += ["Green"]
    print(nameStrArr)
    
    nameStrArr.append("David")
    print(nameStrArr)

下面看輸出結(jié)果

["John", "Smith", "Green"]
["John", "Smith", "Green", "David"]

下面看oc中,只能NSMutableArray可以增加減少數(shù)據(jù)呜象,增加可以用addObject:方法下面我們看代碼膳凝。

    NSArray *nameStrArr = @[@"John", @"Smith"];
    NSMutableArray *arrM = [NSMutableArray arrayWithArray:nameStrArr];
    [arrM addObject:@"Green"];
    NSLog(@"%@",arrM);
    
    [arrM addObjectsFromArray:nameStrArr];
    NSLog(@"%@",arrM);

下面看輸出結(jié)果

2017-07-25 11:28:52.907931+0800 JJOC[5212:1646297] (
    John,
    Smith,
    Green
)

2017-07-25 11:28:52.908002+0800 JJOC[5212:1646297] (
    John,
    Smith,
    Green,
    John,
    Smith
)

通過索引找到和更改數(shù)據(jù)

這個(gè)swiftoc都是一樣的,大家記住索引是從0開始不是從1開始的就好了恭陡,就會(huì)少出現(xiàn)很多錯(cuò)誤蹬音,典型的就是數(shù)組越界。

swift可以用過下標(biāo)改變一系列的數(shù)據(jù)

下面看這個(gè)例子

    var nameStrArr : [String] = ["John", "Smith"]
    nameStrArr[0...1] = ["Green", "Rose", "Rechide", "Adail"]
    print(nameStrArr)

下面看輸出結(jié)果


["Green", "Rose", "Rechide", "Adail"]

這個(gè)是oc沒有的語法休玩。

注意: 不能用下標(biāo)語法在數(shù)組尾部添加新項(xiàng)祟绊,可能引起數(shù)組越界,可以使用索引值和數(shù)組的count屬性進(jìn)行比較來在使用某個(gè)索引之前先檢驗(yàn)有效性哥捕。

插入數(shù)據(jù)

我們先看一下 swift中插入數(shù)據(jù)的情況。

    var nameStrArr : [String] = ["John", "Smith"]
    nameStrArr.insert("Lilei", at: 0)
    print(nameStrArr)

下面看結(jié)果

["Lilei", "John", "Smith"]

下面我們看oc中的方法

    NSArray *nameStrArr = @[@"John", @"Smith"];
    NSMutableArray *arrM = [NSMutableArray arrayWithArray:nameStrArr];
    [arrM insertObject:@"Green" atIndex:0];
    NSLog(@"%@",arrM);

下面看輸出結(jié)果

["Lilei", "John", "Smith"]

移除數(shù)組中的某一項(xiàng)

下面我們看一下swift中移除數(shù)組中的某一項(xiàng)嘉熊。ocswift中都有remove object at index類似方法遥赚,移除某一項(xiàng),也可以調(diào)用removeFirst阐肤、removeLast凫佛、removeAll等方法移除特定的數(shù)據(jù),很簡單和方便孕惜。

    var nameStrArr : [String] = ["John", "Smith", "Lilei"]
    let firstObj = nameStrArr .remove(at: 0)
    print(nameStrArr)
        
    nameStrArr .removeLast()
    print(nameStrArr)

下面看輸出結(jié)果

["Smith", "Lilei"]
["Smith"]

這里注意可以返回移除的數(shù)據(jù)愧薛,firstObj就是返回的數(shù)據(jù),如果不需要衫画,可以不用變量去接收它毫炉。

下面我們看一下oc

    NSArray *nameStrArr = @[@"John", @"Smith", @"Lilei"];
    NSMutableArray *arrM = [NSMutableArray arrayWithArray:nameStrArr];
    [arrM removeObjectAtIndex:0];
    NSLog(@"%@",arrM);
    [arrM removeLastObject];
    NSLog(@"%@",arrM);

下面看輸出結(jié)果

2017-07-25 11:52:16.828288+0800 JJOC[5230:1649832] (
    Smith,
    Lilei
)

2017-07-25 11:52:16.828355+0800 JJOC[5230:1649832] (
    Smith
)

創(chuàng)建指定大小的數(shù)組

下面我們就看一下創(chuàng)建指定大小的數(shù)組,先看oc

    NSMutableArray *arrM = [NSMutableArray arrayWithCapacity:5];
    [arrM addObject:@"Lilei"];
    NSLog(@"%@",arrM);

下面看輸出結(jié)果

2017-07-25 12:19:11.844777+0800 JJOC[5243:1653454] (
    Lilei
)

下面我們看一下swift中的用法削罩。

    var numberArr = [Double](repeatElement(0.0, count: 3))
    print(numberArr)
    
    var numberArr1 = [Double](repeatElement(1.0, count: 3))
    print(numberArr1)
    
    var wholeArr = numberArr1 + numberArr
    print(wholeArr)

下面看輸出結(jié)果

[0.0, 0.0, 0.0]
[1.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 0.0, 0.0, 0.0]

由于swift中有類型推斷瞄勾,所以這里的[Double]可以省略费奸。

3. 數(shù)組的遍歷

數(shù)組的遍歷總是工程中需要的邏輯處理,通過遍歷进陡,在數(shù)組中找到我們感興趣的數(shù)據(jù)愿阐。數(shù)組的遍歷用兩種方法:

  • for - in遍歷,這個(gè)如果對索引不感興趣可以使用
  • enumerated函數(shù)趾疚,返回索引和對應(yīng)數(shù)組值

先看一下swift中缨历。

    var nameStrArr : [String] = ["John", "Smith", "Lilei"]
        
    //for - in 遍歷
    for name in nameStrArr {
        print(name)
    }
        
    print("--------")
    
    //enumerate 遍歷
    for (index, item) in nameStrArr.enumerated(){
        print("\(index): \(item)")
    }

下面看輸出結(jié)果

John
Smith
Lilei
--------
0: John
1: Smith
2: Lilei

下面我們就看一下,oc中的例子糙麦。

    NSArray *nameStrArr = @[@"John", @"Smith", @"Lilei"];
    
    //for - in遍歷
    for (NSString *name in nameStrArr) {
        NSLog(@"%@",name);
    }
    
    NSLog(@"---------");
    
    //enumerate遍歷
    [nameStrArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
         NSLog(@"%@",obj);
    }];

下面看輸出結(jié)果

2017-07-25 12:02:00.962119+0800 JJOC[5235:1650962] John
2017-07-25 12:02:00.962177+0800 JJOC[5235:1650962] Smith
2017-07-25 12:02:00.962192+0800 JJOC[5235:1650962] Lilei
2017-07-25 12:02:00.962204+0800 JJOC[5235:1650962] ---------
2017-07-25 12:02:00.962224+0800 JJOC[5235:1650962] John
2017-07-25 12:02:00.962238+0800 JJOC[5235:1650962] Smith
2017-07-25 12:02:00.962250+0800 JJOC[5235:1650962] Lilei

后記

未完辛孵,待續(xù)~~~~

空山鳥語
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市喳资,隨后出現(xiàn)的幾起案子觉吭,更是在濱河造成了極大的恐慌,老刑警劉巖仆邓,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲜滩,死亡現(xiàn)場離奇詭異,居然都是意外死亡节值,警方通過查閱死者的電腦和手機(jī)徙硅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搞疗,“玉大人嗓蘑,你說我怎么就攤上這事∧淠耍” “怎么了桩皿?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幢炸。 經(jīng)常有香客問我泄隔,道長,這世上最難降的妖魔是什么宛徊? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任佛嬉,我火速辦了婚禮,結(jié)果婚禮上闸天,老公的妹妹穿的比我還像新娘暖呕。我一直安慰自己,他們只是感情好苞氮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布湾揽。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钝腺。 梳的紋絲不亂的頭發(fā)上抛姑,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音艳狐,去河邊找鬼定硝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛毫目,可吹牛的內(nèi)容都是我干的蔬啡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼镀虐,長吁一口氣:“原來是場噩夢啊……” “哼箱蟆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起刮便,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤空猜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后恨旱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辈毯,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年搜贤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谆沃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仪芒,死狀恐怖唁影,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掂名,我是刑警寧澤据沈,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站饺蔑,受9級(jí)特大地震影響卓舵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膀钠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裹虫。 院中可真熱鬧肿嘲,春花似錦、人聲如沸筑公。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至封救,卻和暖如春拇涤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背誉结。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工鹅士, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惩坑。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓掉盅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親以舒。 傳聞我的和親對象是個(gè)殘疾皇子趾痘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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