Swift入门基础2——集合和枚举

数组

创建一个数组,可变的空数组,打印结果为[]

        var arr1 = [String]()
        print(arr1)

以字面量初始化一个数组:

        var arr1: [String] = ["wang66", "wang77", "wang88"]
        print(arr1)

因为Swift有类型检测,所以不用申明数组类型也完全可以,它会根据所赋的字面值自己推断未String类型

        var arr1 = ["wang66", "wang77", "wang88"]
        print(arr1)

给数组追加新的元素:

        var arr1: [String] = ["wang66", "wang77", "wang88"]
        arr1.append("wang99")
        print(arr1)

给数组追加新的数组:

        var arr1: [String] = ["wang66", "wang77", "wang88"]
        arr1 += ["wang99", "wang00"]
        print(arr1)

将俩数组拼接。在Swift中字符串和集合拼接都用+号就行

        var arr1: [String] = ["wang66", "wang77", "wang88"]
        var arr2 = ["wang99", "wang00"]
        var resultArr = arr1 + arr2
        print(res ultArr)

对数组进行删除操作。下面几个删除方法均有返回值,返回被删除的数组元素。通常情况下你不用管返回值。

        var arr1: [String] = ["wang66", "wang77", "wang88"]
        arr1.removeLast()
        arr1.removeFirst()
        let deletedElement = arr1.remove(at: 0)
        print(deletedElement)
        print(arr1)

修改、更新数组元素。你不仅可以通过下标索引修改一个元素,也可以批量修改。

        var arr1: [String] = ["wang66", "wang77", "wang88"]
        arr1[0] = "Jobs"
        arr1[1...2] = ["Yaren", "Tom"] // 根据下标区间,批量修改
        print(arr1)

读取数组。

        let str0 = resultArr[0]
        print(str0)

        let strFirst = resultArr.first
        if let tempStr = strFirst{
            print(tempStr)
        }
        print(strFirst!)
        
        let strLast = resultArr.last
        print(strLast!)

数组中插入元素

        var arr1: [String] = ["wang66", "wang77", "wang88"]
        arr1.insert("wang00", at: 0)
        print(arr1)

遍历数组。当需要数组索引时,可以用enumerated()遍历得到一个个元组,index即为索引,value即为元素的值。

        // 遍历数组
        for item in resultArr {
            print(item)
        }
        for (index, value) in resultArr.enumerated() {
            print("item=\(index), value=\(value)")
        }

字典

字典的用法和数组很相似。

创建一个字典。一个key和value均为String类型的字典,随即设置字符串"wang1"为键"name"的值

        var dict1 = [String:String]()
        dict1["name"] = "wang1"
        print(dict1)

以字面量初始化一个字典。键值均为String类型,且已有两个键nameage

        var dict2: [String:String] = ["name":"wang1", "age":"23"]
        print(dict2)

与数组类似的,它也完全可以不必申明键值类型,Swift会自己检测

        var dict3 = ["name":"wang1"]
        print(dict3)

修改、更新键值。也提供了updateValue(value: forkey:)方法,它有返回值,代表被修改的键的原始值。一般可忽略该返回值。

        var dict = ["name":"wang66", "age":"24"]
        dict["age"] = "18"
        let result = dict.updateValue("wang666", forKey: "name")
        print(result!)
        print(dict)

删除字典元素,删除某键对应的数据。

        var dict = ["name":"wang66", "age":"24"]
        dict.removeValue(forKey: "age")
        print(dict)

遍历字典。遍历字典时是一个个的元组。

        // 遍历
        for (dictKey, dictValue) in dict1 {
            print("\(dictKey)=\(dictValue)")
        }
        
        // 遍历所有key
        for key in dict1.keys {
            print("key=\(key)")
        }
        
        // 遍历所有values
        for value in dict2.values {
            print("value=\(value)")
        }

枚举

在OC中可以把枚举理解为取了个别名的整型数。但是Swift的枚举却发生了很大变化,它可以是任意类型。应该这么说,定义了一个枚举,就是定义了一个类型,它里面的成员的类型就是该枚举,它有点类似类和结构体的感觉。 比如下面定义了一个PositionType枚举,对于它的成员north,south...来说,它们的类型就是PositionType

enum PositionType {
    case north
    case south
    case east
    case west
}

使用时直接用点语法就可以了。当通过点语法将枚举值赋给direction时,Swift便会推断出其类型,所以再后续操作direction时,甚至可以省略枚举名了,直接用点语法点出它的成员来。

        var direction = PositionType.north
        direction = .east
        print(direction)
        // log:east

Swift中可以给枚举的成员设置“原始值”,所有成员的原始值的类型必须相同。下面这个叫BallType的枚举,它的成员原始值都是String类型的。

enum BallType: String {
    case basketball = "BB"
    case football = "FB"
    case golfball = "GB"
}

现在给枚举的成员已然设置了“原始值”,那我们怎么获取“原始值”呢?——通过成员的rawValue方法。

        let rawValue = BallType.basketball.rawValue
        print(rawValue)

** 枚举的隐式赋值:**虽说Swift中的枚举成员不像OC那样,默认第一个成员值为0,然后依次递增。Swift的枚举成员默认是没值的,更不用说值递增了。但是,若你手动的给第一个成员设置一个值,那此时,它后面的成员便会递增。

定义一个分数等级的枚举。将第一个成员D手动赋值为1。

// 分数等级
enum ScoreLevel: Int {
    case D = 1
    case C
    case B
    case A
}

获取成员B的值,打印结果可以看到B的值为3。

        let score = ScoreLevel.B.rawValue
        print(score)
        // log:3
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容