<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## Swift 枚舉 ### 枚舉定義 定義語法: ``` emun 枚舉名稱 { case 枚舉值 case 枚舉值 ... } ``` 例如:定義枚舉型 Month 時,我們可以使用如下方式: ``` enum Month{ case January case February case March case April case May case June case July case August case September case October case November case December } ``` ### 枚舉型的取值 ``` var currMonth = Month.September // 當確定了變量是枚舉類型也可以直接使用 .枚舉名 獲取。 var currMonth: Month = .September ``` ### 使用枚舉類型 ``` // 枚舉月份 enum Month{ case January case February case March case April case May case June case July case August case September case October case November case December } // 枚舉月份 可以將case省略而將定義放在一行 enum Season{ case Spring, Summer, Autumn, Winter } func season(month: Month) -> Season{ switch month { case .March, .April, .May: return .Spring case .June, .July, .August: return .Summer case .September, .October, .November: return .Autumn case .December, .January, .February: return .Winter } } print( season(month: .April ) ) // Spring ``` ### 枚舉之原始值 ``` enum Month: Int { // 定義原始值是整形類型 case January = 1 case February = 2 case March = 3 case April = 4 case May = 5 case June = 6 case July = 7 case August = 8 case September = 9 case October = 10 case November = 11 case December = 12 } // 查找當前月份距離新年還剩多少個月 func monthsBeforeNewYear( _ month: Month ) -> Int{ return 12 - month.rawValue } let month: Month = .October monthsBeforeNewYear(month) // 距離新年還有 2 個月 // 使用枚舉型的構造函數進行數據處理 let input = 2 if let month = Month( rawValue: input) { monthsBeforeNewYear(month) } ``` ### 使用枚舉型默認的原始值 ``` enum Grade: Int{ case F, E, D, C, B, A } let grade: Grade = .A print("Your score is \(grade.rawValue)") // Your score is 5 ``` > 枚舉型的原始值默認從0開始計算,逐步+1。 自定義枚舉型的原始值 ``` enum Coin: Int{ case Penny = 1 case Nickel = 5 case Dime = 10 case Quarter = 25 } let coin: Coin = .Quarter print("It's \(coin.rawValue) cents") // It's 25 cents ``` ### 枚舉其他類型原始值 枚舉型的rawValue為String定義 ``` enum ProgrammingLanguage: String { // 枚舉型的rawValue為String case Swift // 不填寫 使用 ProgrammingLanguage.rawValue 的值為:Swift,即默認原始值為 Swift case ObjectiveC = "Objective-C" case C case Java } var myFavoriteLanguage: ProgrammingLanguage = .ObjectiveC print("\(myFavoriteLanguage.rawValue) is my favorite language.") // Objective-C is my favorite language. myFavoriteLanguage = ProgrammingLanguage.Swift print("\(myFavoriteLanguage.rawValue) is my favorite language.") // Swift is my favorite language. ``` ### 枚舉之關聯值 在Swift中,枚舉型支持枚舉的可能性可以和一個變量相關聯(Associat Value),并且他們之間的值類型可以不同。 #### 關聯一個值 下列是一個用戶在 ATM 取款的場景,判斷用戶取的錢是否小于賬戶余額。 > 如果關聯值是`Associat Value`,則不需要像聲明 `Raw Value`一樣在聲明enum時指明類型。 ``` enum AtmStatus { case Success(Int) // 枚舉的值關聯一個整型值 case Error(String) // 枚舉的值關聯一個字符串 case Waiting } var balance = 1000 // 賬戶與余額 func withDraw( amount: Int) -> AtmStatus { // 返回值為枚舉型 if balance >= amount{ balance -= amount return .Success(balance) }else{ return .Error("Not enough money") } } let result = withDraw(amount: 100) switch result { // 在判斷語句中使用 let 解包 case let .Success(newBanacle): print("\(newBanacle) Yuan left in your account.") case let .Error(errorMessage): print("Error: \(errorMessage)") case .Waiting: print("Waiting") } ``` > 枚舉型中關聯值不是必須的,可以有的存在,有的不存在。 #### 關聯多個值 關聯多個值時,參數相當于**元組**。 > 關聯值時還可以定義名稱,也可以理解為是元祖的分量名稱。 ``` enum Shape { case Square( side: Double ) // 正方形 case Rectangle( width: Double, height: Double ) // 長方形 case Circle(centerx: Double , centery: Double , radius: Double) // 圓形 case Point // 點,不存在關聯值 } let square = Shape.Square(side: 10) let rectangle = Shape.Rectangle(width: 20, height: 30) let circle = Shape.Circle(centerx: 40, centery: 50, radius: 60) let point = Shape.Point func area(shape: Shape) -> Double{ switch shape { case let .Square( side ): return side * side case let .Rectangle( width , height ): return width * height case let .Circle( _ , _ , r ): // 使用 _ 忽略元祖的解包參數 return M_PI * r * r case .Point: return 0 } } area(shape: square) // 正方形 area(shape: rectangle) // 長方形 area(shape: circle) // 圓形 area(shape: point) // 點 ``` ### 可選型的實質是枚舉 ``` var website: Optional<String> = Optional.some("webfsd.com") // 定義可選型 var website: Stirng? = "webfsd.com" website = .none // nil // 可選型的解包 switch website { case .none: print("No website") case let .some(website): // 將關聯值傳遞給website print("The website is \(website)") } if let website = website { print("The website is \(website)") }else{ print("No website") } ``` ### 枚舉類型定義方法 枚舉型中也可以定義方法 ``` // 枚舉類型定義方法 enum Shape{ case Square(side: Double) // 正方形 case Rectangle(width: Double , height: Double) // 長方形 case Circle(centerx: Double , centery: Double , radius: Double) // 圓形 case Point // 點 // 計算面積的方式 func area() -> Double { switch self { // 枚舉變量判斷自己 case let .Square( side ): return side * side case let .Rectangle( width , height ): return width * height case let .Circle( _ , _ , r ): return M_PI * r * r case .Point: return 0 } } } let shape = Shape.Square(side: 10) let rectangle = Shape.Rectangle(width: 10, height: 5) let circle = Shape.Circle(centerx: 10, centery: 20, radius: 8) let point = Shape.Point shape.area() rectangle.area() circle.area() point.area() ``` ### 枚舉類型是值類型 ``` enum Direction{ case North case South case East case West } var d1 = Direction.East var d2 = d1 d2 = Direction.West d1 // East d2 // West ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看