Swift(六)枚舉和結(jié)構(gòu)體

更新:2018.05.24

整理了一下demo:SwiftDemo


好久沒弄了似将,最近一直在找房子遵堵,搬家念脯,軟裝触徐,累瘋了摹菠。

枚舉

  • 枚舉在OC中已經(jīng)很常見了囊扳,所謂枚舉尿贫,是中將變量的值一一列舉出來往毡,并只限于在列舉出來的值的范圍內(nèi)進行取值个少。
  • 在Swift中洪乍,枚舉更加常見,并且不需給枚舉中的每個成員都提供值夜焦。
  • Swift中壳澳,枚舉可以支持字典、字符茫经、整數(shù)和浮點類型巷波。作為枚舉成員的數(shù)據(jù)類型萎津。
定義

枚舉的定義需要好enum關(guān)鍵字,枚舉的成員則被放置在一對大括號中抹镊。

enum 枚舉名稱 {
  // 此處放置枚舉的成員
}

當我們要定義一個用戶等級系統(tǒng)時~~

enum UserLevel {
  case 總經(jīng)理
  case 區(qū)域經(jīng)理
  case 主管
  case 業(yè)務(wù)員
}

UserLevel枚舉中定義的值:總經(jīng)理锉屈、區(qū)域經(jīng)理、主管垮耳、業(yè)務(wù)員颈渊。就會枚舉的成員值或成員,通過case關(guān)鍵字明確要定義的成員终佛。
在定義枚舉時俊嗽,如果枚舉成員較少,也可以將枚舉成員放置在一行之后中铃彰。

例如:

enum UserLevel {
  case 總經(jīng)理,區(qū)域經(jīng)理,主管,業(yè)務(wù)員
}

這兩種方式都可以完枚舉定義

和OC不同的是:

  • Swift的枚舉成員在被創(chuàng)建時绍豁,不會被賦予一個默認的整數(shù)值,例如在上面的例子中豌研,總經(jīng)理妹田、區(qū)域經(jīng)理、主管鹃共、業(yè)務(wù)員鬼佣,他們的值并不會等于 0、1霜浴、2晶衷、3。
  • 當你定義一個枚舉類型的變量或者常量時阴孟,在輸入枚舉名稱和.之后晌纫,系統(tǒng)會自動彈出枚舉列表。
遍歷枚舉

通常使用switch語句進行枚舉的遍歷操作:

        switch userLevel {
        case UserLevel.業(yè)務(wù)員:
            print("業(yè)務(wù)員登錄形同")
        case UserLevel.主管:
            print("主管登錄系統(tǒng)")
        case UserLevel.區(qū)域經(jīng)理:
            print("區(qū)域經(jīng)理登錄系統(tǒng)")
        default:
            print("大bose登錄系統(tǒng)")
        }
枚舉的原始值

枚舉成員可以使用相同類型的默認值永丝,這些默認值就是枚舉的原始值

enum Gender : UInt8 {
  case Male = 1
  case Female = 2
  case Unknow = 3
}

可以看出锹漱,我們定義了一個Gender的枚舉,其原始值類型為UInt8慕嚷,美劇的三個成員的值是1哥牍,2,3喝检。

也可以這樣寫:

enum Gender : UInt8 {
  case Male = 1, Female,Unknow
}

在上面的例子中嗅辣,Gender.Make = 1,它有明確的原始值挠说,則Gender.Female的隱式原始值是2澡谭,以此類推。

給枚舉添加方法

swift中的枚舉可以添加方法

    enum Gender : UInt8 {
        case Male,Female,UnKnow
        func description() {
            switch self {
            case.Male:
                print("Hi,Man~")
            case.Female:
                print("Hi,lady~")
            case.UnKnow:
                print("Hi~")
            }
        }
    }


        let gender = Gender.Female
        gender.description()

在上面的例子中损俭,為Gender 枚舉添加了一個 description的方法蛙奖,在這個方法中潘酗,通過switch遍歷枚舉并輸出。

結(jié)構(gòu)體

  • 在Swfit開發(fā)環(huán)境中外永,結(jié)構(gòu)體是構(gòu)建代碼所用的一種通用且靈活的結(jié)構(gòu)體崎脉。
  • Swfit中,把一些基本數(shù)據(jù)類型伯顶,string囚灼,array,dictionary等全部變成了結(jié)構(gòu)體祭衩,更方便我們使用灶体。
  • 可以為結(jié)構(gòu)體定義變量或常量的屬性,甚至可以像枚舉一樣掐暮,給結(jié)構(gòu)體添加方法蝎抽。
定義

結(jié)構(gòu)體的定義格式和枚舉相似,是以struct關(guān)鍵字來進行定義的路克。

struct 結(jié)構(gòu)體名稱 {
  // 此處為結(jié)構(gòu)體內(nèi)容
}

舉例將動物園作為一個結(jié)構(gòu)體:

struct Animal {
  let zooName:String = "Beijing Zoo"
  var name:String
}

上面例子中樟结,使用struct關(guān)鍵字定義了一個結(jié)構(gòu)體,由于動物園的名字是固定的精算,所以給zooName定義一個常量的值瓢宦,每個動物園的動物有很多種,所以給名字一個變量的值灰羽。
對于結(jié)構(gòu)體的實例化驮履,可以這樣:

let animal = Animal(name:"Tiger")

輸出animal中的name屬性:

print(animal.name)      // 輸出結(jié)果為:Tiger

還可以修改實例的name屬性:

var animal = Animal(name:"Tiger")
animal.name = "Elephant"
print(animal.name)      // 輸出結(jié)果為:Elephant

需要注意的是:類是引用類型,而結(jié)構(gòu)體和枚舉都是值類型廉嚼。值類型是一種當它被指定為常量或變量玫镐,或被傳遞給函數(shù)時會拷貝的類型。這意味著你所創(chuàng)建的任意結(jié)構(gòu)體和枚舉實力怠噪,作為屬性所包含的任何類型恐似,在代碼傳遞中總是被拷貝的。
如例:

let firstAnimal = Animal(name:"Tiger")
var secondAnimal = firstAnimal
secondAnimal.name = "Elephant"
print(firstAnimal)      // 輸出結(jié)果:Tiger
print(secondAnimal)    // 輸出結(jié)果: Elephant

上例中傍念,創(chuàng)建了一個Animal結(jié)構(gòu)體的實體矫夷,并初始化name屬性為Tiger
然后將firstAnimal實例賦予secondAnimal變量捂寿。當firstAnimal被賦予給secondAnimal變量時口四,firstAnima的值就被拷貝了一份孵运。并將拷貝的實例賦予給secondAnimal秦陋,這樣就產(chǎn)生了兩個不同的實例。所以當secondAnimalname屬性修改時治笨,firstAnimalname不會變化驳概。

給結(jié)構(gòu)體添加方法

和枚舉的方法類似

    struct Animal {
        let zooName:String = "Beijing Zoo"
        var name:String
        func say() {
            print("Hi,\(name)!")
        }
    }

        let animal = Animal(name:"Tiger")
        print(animal.say())    // Hi,Tiger!

結(jié)構(gòu)體的下標
  • 結(jié)構(gòu)體赤嚼、類和枚舉都可以定義下標,它可以作為訪問集合顺又、列表或序列成員元素的快捷方式更卒。
  • 可以使用下標通過索引值來設(shè)置或檢索值,而不需要設(shè)置和檢索分別使用實例方法稚照。
  • 結(jié)構(gòu)體可以定義多個下標蹂空,并且下標會基于傳入的索引值的類型,選擇合適的下標重載使用果录。
  • 下標的語法類似乎實例方法和計算屬性上枕。使用關(guān)鍵字 subscript來定義下標,并指定一個或多個輸入形式參數(shù)和返回參數(shù)弱恒,與實例方法一樣辨萍。

例:

    struct MySubscript {
        var num:Int
        subscript(n:Int) ->Int {
            return num*n
        }
    }

上例中,定義了一個名為MySubscript的結(jié)構(gòu)體返弹,它擁有一個名為num的整形屬性锈玉。
在下面的代碼中,使用subscript定義一個下標义起,通過傳入一個整形參數(shù)拉背,將結(jié)構(gòu)體的屬性乘以若干倍。

使用方法如下:

let sub = MySubscript(num:3)
print(sub[3])      // 輸出結(jié)果:9
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末并扇,一起剝皮案震驚了整個濱河市去团,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌穷蛹,老刑警劉巖土陪,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肴熏,居然都是意外死亡鬼雀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門蛙吏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來源哩,“玉大人,你說我怎么就攤上這事鸦做±常” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵泼诱,是天一觀的道長坛掠。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么屉栓? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任舷蒲,我火速辦了婚禮,結(jié)果婚禮上友多,老公的妹妹穿的比我還像新娘牲平。我一直安慰自己,他們只是感情好域滥,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布纵柿。 她就那樣靜靜地躺著,像睡著了一般启绰。 火紅的嫁衣襯著肌膚如雪藐窄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天酬土,我揣著相機與錄音荆忍,去河邊找鬼。 笑死撤缴,一個胖子當著我的面吹牛刹枉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屈呕,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼微宝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了虎眨?” 一聲冷哼從身側(cè)響起蟋软,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嗽桩,沒想到半個月后岳守,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡碌冶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年湿痢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扑庞。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡譬重,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出罐氨,到底是詐尸還是另有隱情臀规,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布栅隐,位于F島的核電站塔嬉,受9級特大地震影響狠怨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜邑遏,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恰矩。 院中可真熱鬧记盒,春花似錦、人聲如沸外傅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萎胰。三九已至碾盟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間技竟,已是汗流浹背冰肴。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留榔组,地道東北人熙尉。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像搓扯,于是被迫代替她去往敵國和親检痰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

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