学习Swift--枚举的初步认识 --个人备忘 大神勿喷

枚举定义了一个通用类型的一组相关值,使你可以在你的代码中以一种安全的方式来使用这些值。

// 定义枚举的语法
enum Chips {    // 定义了薯片的枚举,包含了3种口味的成员
    case Tomato
    case Original
    case Barbecue
}

每个枚举定义了一个全新的类型。像 Swift 中其他类型一样,它们的名字必须以一个大写字母开头。给枚举类型起一个单数名字而不是复数名字,以便于读起来更加容易理解.

一般匹配枚举值都是用switch

var chip = Chips.Original
// 匹配枚举值
switch chip {
case .Tomato :
    print("tomato")
case .Original :
    print("original")
case .Barbecue :
    print("barbecue")
}

上面的例子演示了枚举的基本语法,下面来记录一下为成员值赋予一个任何属性的相关值,一起储存起来的话一些特别情况会更便利些

// <假如>自定义了一个控件需要传控件的显示形式(如button的custom)
enum ViewType {
    case Normal(String)             // 比如说需要传进一个要显示的字符串
    case Contains(Double, Double)   // 比如说需要传进显示比例
}

var viewType = ViewType.Normal("传入了需要显示的字符串(赋予了相关值)")

switch viewType {
case .Normal(var str) :
    print("设置控件需要显示的字符串");
case let .Contains(widthScale, hightScale) :
    print("设置控件的宽高缩放比例");
}

作为相关值的另一种选择,枚举成员可以被默认值(称为原始值)赋值,其中这些原始值具有相同的类型。

enum Month : Int {      // 因为原始值类型必须一致 所以将原始值定义为Int  注意:原始值和相关值不能同时使用
    case January        // 如果没有给定原始值 会隐式将第一个成员赋值为0,随后的每一个成员递增1
    case February
    case March
    case April
}

var february = Month.February
print(february, february.rawValue)  // 输出:"February 1\n"
enum Month : Int {      // 也可以将所有成员值缩减到1行 与之前的效果是一样的
    case January = 1, February, March, April
}

var february = Month.February
print(february, february.rawValue)  // 输出:"February 2\n"

注:如果初始值为Float或Double的话也会默认递增1

enum Month : String {      // 如果是字符串类型的初始值、并且没有显式的赋值,那么就将成员名字设置为初始值
    case January = "1月", February, March, April
}

var january = Month.January
print(january, january.rawValue)    // 输出:"January 1月\n"

var march = Month.March
print(march, march.rawValue)        // 输出:"March March\n"

下面来记一下通过原始值来构造枚举

enum ViewContentType : Int {        // 模拟一个视图的内容模式
    case Normal = 0, System, Custom, Ancient
}

// 根据原始值构造一个枚举
if let type = ViewContentType(rawValue: 2){     // 注意 原始值构造器是可失败构造器(可能会返回nil)所以返回的是可选类型,需要使用可选绑定
    switch type {
    case .Normal:
        // do something...
        print(type)
    case .System:
        // do something...
        print(type)
    default:
        // do sonthing...
        print(type)             // 最后输出这一句
    }
}

下面来记录下相比较OC中的枚举 Swift枚举的新特性:Swift中 枚举可以定义类型属性和实例属性

// <假如>自定义了一个控件需要传控件的显示形式(如button的custom)
enum ViewType {

    // 我们拿这个枚举举例 假如说声明一个实例属性可以返回相对应成员值的size 注意 viewSize是只读的计算属性
    var viewSize : CGSize {
        switch self {
        // 参数暂时省略
            // 可以根据不同的成员返回相对应的size
        case .Normal(_) :               return CGSize(width: 100, height: 20)
        case .Contains(_, _) :          return CGSize(width: 390, height: 300)
        }
    }

    // 声明类型属性
    static let comment = "这个枚举有两个成员,设置不同的值来改变控件的摆布状态"

    case Normal(String)             // 比如说需要传进一个要显示的字符串
    case Contains(Double, Double)   // 比如说需要传进显示比例
}

let type = ViewType.Normal("一个字符串")
// 调用实例计算属性 获得size
let viewSize = type.viewSize

// 调用类型计算属性
print(ViewType.comment)

枚举还可以声明方法

enum Month : Int {      // 因为原始值类型必须一致 所以将原始值定义为Int  注意:原始值和相关值不能同时使用

    // 枚举可以声明方法 就跟类的写法一样 不过要是修改自身的值就需要加一个关键字
    mutating func nextMonth() -> String {
        switch self {
        case January :
            self = February
            return "已经到2月拉"

        case .February :
            self = March
            return "已经到3月拉"

        default : return "以此类推"
        }
    }

    case January        // 如果没有给定原始值 会隐式将第一个成员赋值为0,随后的每一个成员递增1
    case February
    case March
    case April
}

var month = Month(rawValue: 0)          // january
let string = month?.nextMonth()         // 返回一个字符串 并且把成员值改为February
print(month)                            // 打印出 "Optional(Month.February)\n"
时间: 2024-10-09 05:34:29

学习Swift--枚举的初步认识 --个人备忘 大神勿喷的相关文章

Android学习备忘笺01Activity

01.设置视图 在Android Studio新建的项目中,通过 setContentView(R.layout.activity_main);方法将res/layout/activity_main.xml 设置为MainActivity的视图,既可视化界面. 1 //IDE:Android Studio 2.3.1 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(save

Swift学习-枚举(Enumerations)的使用方法

Swift学习-枚举的使用方法 枚举的使用语法: enum someEnumer { // 枚举的成员值 } 以下是方向的一个例子: enum direction { case Up case Down case Left case Right } 以下摘自Swift 中文翻译组 注意: 不像 C 和 Objective-C 一样,Swift 的枚举成员在被创建时不会被赋予一个默认的整数值.在上面的CompassPoints例子中,North,South,East和West不是隐式的等于0,1,

Swift 学习- 09 -- 枚举

// 递归枚举 // 美家居为一组相关的值定义了一个共同的类型, 使你可以在代码中以类型安全的的方式使用这些值. // 如果你熟悉C语言, 你会知道在C语言中, 枚举会为一组整型值分配相关联的名称, swift 中的枚举更加的灵活, 不必给每一个枚举成员提供一个值,如果给枚举成员提供一个值 (称为原始值), 则该值的类型可以是字符串,字符, 或者是一个整型值或浮点数, // 此外, 枚举成员可以指定任意类型的关联值存储到枚举成员中, 你可以在一个枚举中定义一组相关的枚举成员, 每一个枚举成员都可

Swift学习——Swift基础详解(六)

Optionals    选配 选配(好像不是这么翻译的)适用于那些值可能为空的情况,一个选配有两种情况:存在值并且等于x,或者值不存在. 选配的概念在OC和C里面并没有,在OC中最接近的概念就是:OC中的返回值为对象的函数,当对象不存在的时候,可以返回nil,但是nil只能代表对象,不可以代表基础类型或者结构体和枚举类型.OC中使用NSNotFound表示值不存在.在Swift中,不需要使用其他的类型表示不存在的值. 举个例子: 在Swift中,String类型有一个方法叫做toInt,但是并

ios -- 教你如何轻松学习Swift语法(二)

前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦. 一.可选类型(重点内容) 1.什么是可选类型? 1.1在OC开发中,如果一个变量暂停不使用,可以赋值为0(基本属性类型)或者赋值为空(对象类型) 1.2在swift开发中,nil也是一个特殊的类型.因为和真实的类型不匹配是不能赋值的(swift是强类型语言) 1.3但是开发中赋值nil,在所难免.因此推出了可选类型 目的:让代码更加严谨 2.可选类型的取值 可选类型要么是:空值 , 要么

关于学习Swift的一些感受

最近准备开始学习Swift.之前计划的是一个月内要能写出一个简单的APP出来.毕竟我只有晚上下班了有点时间. 因为从网上看的或者听别人说的,都说如果会OC,Swift学习也就一两个星期的事情.然后我就当真了.. 然后,开始看了一个星期的官方文档,照着文档敲例子还行,敲玩就忘了..我以为是因为看的英文的原因. 然后,又开始拿中文翻译文档,准备从头开始看一遍,结果还是一样的,看了一半文档,发现前面的又忘了.. 不得不说我的记忆力确实太渣了. 今天周末,下定决心不看文档了,直接从github上找了几个

Swift - 枚举

1,首先打开xcode,新建一个swift的工程. 2,定义第一种枚举  方法如下: import Foundation println("Hello, World!") //定义一个枚举 enum //Direction这个是枚举的名字 enum Direction { //在枚举中定义的值(如North,South,East和West)是枚举的成员值(或成员).这个例子里case关键字表示成员值一条新的分支将被定义 case North case South case East c

一步一步学习Swift之(一):关于swift与开发环境配置

一.什么是Swift? 1.Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用. 2.Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制. 3.Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣. 4.Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,它的降临将重新定义软件开发. 5.Swift 是编写 iOS 和 OS X 应用的极佳手段,并将伴随着新的特性和功能持续演进.

Swift 枚举和结构

枚举 使用enum创建枚举--注意 Swift 的枚举可以关联方法: 1 enum Rank: Int { 2 case Ace = 1 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten 3 case Jack, Queen, King 4 func simpleDescription () -> String { 5 switch self { 6 case .Ace: 7 return "ace" case .