Swift中文教程(六)枚举和结构

Enumerations 枚举

使用 enum 来创建一个枚举。跟Classes(类)和其他类型的命名方式一样,枚举也可以有Method(方法)。

enum Rank: Int {
    case Ace = 1
    case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
    case Jack, Queen, King
    func simpleDescription() -> String {
        switch self {
        case .Ace:
            return "ace"
        case .Jack:
            return "jack"
        case .Queen:
            return "queen"
        case .King:
            return "king"
        default:
            return String(self.toRaw())
        }
    }
}
let ace = Rank.Ace
let aceRawValue = ace.toRaw()

练习:

创建一个函数,通过原始值的类比来比较两个rank的值。

在上例中,原始值的类型是 Int ,所以你可以只指定第一个原始值就可以了,因为后面的原始值都是按照顺序赋值的。你还也可以使用字符串或浮点数作为枚举的原始值。

使用toRaw和fromRaw函数可以实现原始值和枚举值间的转换:

1 if let convertedRank = Rank.fromRaw(3) {
2     let threeDescription = convertedRank.simpleDescription()
3 }

枚举出来的值就是实际值,而不是其他方式写的原始值。(这句话的意思应该就是说枚举值和原始值没有必然的关联性)为了防止枚举无意义的原始值,你不需要特意提供一个原始值:

enum Suit {
    case Spades, Hearts, Diamonds, Clubs
    func simpleDescription() -> String {
        switch self {
        case .Spades:
            return "spades"
        case .Hearts:
            return "hearts"
        case .Diamonds:
            return "diamonds"
        case .Clubs:
            return "clubs"
        }
    }
}
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()

练习:

给枚举Suit创建一个名为color的方法,让Spades和Clubs返回“black”,让Hearts和Diamonds返回“red”。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/extra/

请注意上例中引用hearts成员的两种方式:当给常量hearts赋值时,Suit.Hearts是全名引用,因为此时的常量hearts没有一个明确的类型。而在switch内部,枚举通过缩略形式:.Hearts来引用,因为 self 的值对于枚举成员是已知的。当值的类型已知时,你可以随时使用缩略形式(去引用)。

Structures 结构

使用struct关键字创建来创建结构。结构体支持类(Classes)的许多行为:如,方法(methods)和构造器(initializers)。结构体与类最重要的区别是,在代码中,结构体通过拷贝(copy)来实现值的传递,而类则是通过引用(reference):

struct Card {
    var rank: Rank
    var suit: Suit
    func simpleDescription() -> String {
        return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
    }
}
let threeOfSpades = Card(rank: .Three, suit: .Spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription()

练习:

添加一个Card方法来创建一副纸牌,每一张牌都含有一个Rank和Suit的组合。

一个枚举成员的实例可以拥有实例的值。相同枚举成员的实例可以有不同的值。你在创建实例时可以给它指定一个值。指定值和原始值的区别在于:枚举的原始值与所有实例相同,原始值是你在定义枚举时提供的。

例如:有一个场景,需要你从服务器中请求太阳升起和降落的时间,服务器可以响应给你相应的信息,也能给你返回错误的信息:

enum ServerResponse {
    case Result(String, String)
    case Error(String)
}  

let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")  

switch success {
case let .Result(sunrise, sunset):
    let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
case let .Error(error)://请求错误时返回的信息--Joe.Huang
    let serverResponse = "Failure...  \(error)"
}

练习:

在switch语句里给ServerResponse添加第三种情况(case)。

请注意:(上例中)ServerResponse所返回的日出与日落时间是switch中所匹配的情况(case)。

作者:cnblogs Joe.Huang

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索rank interleaving
, rank
, string
, return
, case
, 系统服务枚举
, ace 命名
, 一个
, let
, switch结构
, 原始
, js原始值和引用值
原始值
swift3.0中文教程、swift3.0中文教程pdf、swift中文教程、swift30中文教程pdf、swift3.0教程中文版,以便于您获取更多的相关知识。

时间: 2024-11-01 18:07:13

Swift中文教程(六)枚举和结构的相关文章

Swift中文教程(五)对象和类

Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文里面,否则,方法和函数的写法也是这样: class Shape { var numberOfSides = 0 func simpleDescription() -> String { return "A shape with \(numberOfSides) sides." } } 练习: 用let关键字添加一个常量属性,添

Swift中文教程(四)函数和闭包

Function 函数 Swift使用func关键字来声明函数,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: func greet(name: String, day: String) -> String { return "Hello \(name), today is \(day)." } greet("Bob", "Tuesday") 练习: remove day参数,增加一个参数,比如:今天的

Swift中文教程(三)流程控制

Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环.条件控制语句和循环语句中,小括号是可选的,但花括号包住这个循环体是必须的: let individualScores = [75, 43, 103, 87, 12] var teamScore = 0 for score in individualScores { if score > 50 { teamScore += 3 } else { teamScore += 1 } } tea

Swift中文教程(二) 简单值

Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: 1 var myVariable = 42 2 myVariable = 50 3 let myConstant = 42 这里的常量赋值之后值不能更改,应该提高重用性. 一个常量或变量的值与类型必须是一致的.不过,你不需要指明它的类型,因为编译器会根据你所赋的值推断它的类型,在上面的例子中,编译器会判断到myVariable是一个整型(integer),因为它的初始

Swift中文教程(四)--函数与闭包

原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: 1 func greet(name: String, day: String) -> String { 2 return "Hello \(name), today is \(day)." 3 } 4 greet("Bob", "Tuesday")

Swift中文教程(一) 欢迎来到Swift的世界

Apple凌晨时在WWDC发布了Swift编程语言,语法简介我很喜欢,市面上没有完整的中文教程,我在ibooks里面下载了英文原版,现在开始尝试翻译Swift.我会抽时间坚持原版翻译完,时间有限,不正之处请大家多多指教. 新建了Swifter-QQ群:362232993,同好者进. 第一章:欢迎来到Swift的世界 1,简介 Swift是一款全新的面向IOS和OS Apps的编程语言,建立在C语言和Objective-C语言的基础之上,而且,完美兼容C语言.Swift采用了安全编程模式,增加了许

Swift中文教程(七)协议、扩展和泛型

Protocols and Extensions 协议(接口)和扩展 Swift使用关键字protocol声明一个协议(接口): 类(classes),枚举(enumerations)和结构(structs)都可采用协议(protocol): class SimpleClass: ExampleProtocol { var simpleDescription: String = "A very simple class." var anotherProperty: Int = 6910

Swift教程_零基础学习Swift完整实例(三)_swift基础(对象和类、枚举和结构、协议和扩展、泛型)

4.对象和类(Objects and Classes) 1.同Java一致,使用class和类名来创建一个类. 2.使用init创建一个构造方法,使用deinit创建一个析构方法,通过构造方法来初始化类实例.创建类实例同java一致,在类名后面加上()(实际是调用无参数的构造方法init(),构造方法也可以带参数).使用.来访问实例的属性和方法. [objc] view plain copy class NamedShape {       var numberOfSides: Int = 0/

《Swift开发实战》——第2章,第2.6节枚举和结构体

2.6 枚举和结构体 在Swift语言中,使用关键字enum来创建一个枚举.就像类和其他所有命名类型一样,在枚举中可以包含方法.例如,如下所示的演示代码. enum Rank: Int { case Ace = 1 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King func simpleDescription() -> String { switch self { case .Ace: