`
天梯梦
  • 浏览: 13742199 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

Swift中文教程(十九) 类型嵌套

 
阅读更多

枚举类型常被用于实现特定类或结构体的功能。也能够在有多种变量类型的环境中,方便地定义通用类或结构体来使用,为了实现这种功能,Swift允许你定义类型嵌套,可以在枚举类型、类和结构体中定义支持嵌套的类型。

 

要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。

 

 

类型嵌套实例

 

下面这个例子定义了一个结构体BlackjackCard(二十一点),用来模拟BlackjackCard中的扑克牌点数。BlackjackCard结构体包含2个嵌套定义的枚举类型SuitRank

 

BlackjackCard规则中,Ace牌可以表示1或者11,Ace牌的这一特征用一个嵌套在枚举型Rank的结构体Values来表示。

struct BlackjackCard {
    // 嵌套定义枚举型Suit
    enum Suit: Character {
       case Spades = "♠", Hearts = "♡", Diamonds = "♢", Clubs = "♣"
   }
    // 嵌套定义枚举型Rank
    enum Rank: Int {
       case Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten
       case Jack, Queen, King, Ace
       struct Values {
           let first: Int, second: Int?
       }
       var values: Values {
        switch self {
        case .Ace:
            return Values(first: 1, second: 11)
        case .Jack, .Queen, .King:
            return Values(first: 10, second: nil)
        default:
            return Values(first: self.toRaw(), second: nil)
            }
       }
    }
    // BlackjackCard 的属性和方法
    let rank: Rank, suit: Suit
    var description: String {
    var output = "suit is \(suit.toRaw()),"
        output += " value is \(rank.values.first)"
        if let second = rank.values.second {
            output += " or \(second)"
        }
        return output
    }
}

 

枚举型的Suit用来描述扑克牌的四种花色,并分别用一个Character类型的值代表花色符号。

 

枚举型的Rank用来描述扑克牌从Ace~10,J,Q,K,13张牌,并分别用一个Int类型的值表示牌的面值。(这个Int类型的值不适用于Ace,J,Q,K的牌)。

 

如上文所提到的,枚举型Rank在自己内部定义了一个嵌套结构体Values。这个结构体包含两个变量,只有Ace有两个数值,其余牌都只有一个数值。结构体Values中定义的两个属性:

 

first, 为Int second, 为 Int?, 或 “optional Int

 

Rank定义了一个计算属性values,这个计算属性会根据牌的面值,用适当的数值去初始化Values实例,并赋值给values。对于J,Q,K,Ace会使用特殊数值,对于数字面值的牌使用Int类型的值。

 

BlackjackCard结构体自身有两个属性—ranksuit,也同样定义了一个计算属性descriptiondescription属性用ranksuit的中内容来构建对这张扑克牌名字和数值的描述,并用可选类型second来检查是否存在第二个值,若存在,则在原有的描述中增加对第二数值的描述。

 

因为BlackjackCard是一个没有自定义构造函数的结构体,在Memberwise Initializers for Structure Types中知道结构体有默认的成员构造函数,所以你可以用默认的initializer去初始化新的常量theAceOfSpades:

let theAceOfSpades = BlackjackCard(rank: .Ace, suit: .Spades)
println("theAceOfSpades: \(theAceOfSpades.description)")
// 打印出 "theAceOfSpades: suit is ♠, value is 1 or 11"

 

 

尽管RankSuit嵌套在BlackjackCard中,但仍可被引用,所以在初始化实例时能够通过枚举类型中的成员名称单独引用。在上面的例子中description属性能正确得输出对Ace牌有1和11两个值。

 

 

类型嵌套的引用

 

在外部对嵌套类型的引用,以被嵌套类型的名字为前缀,加上所要引用的属性名:

let heartsSymbol = BlackjackCard.Suit.Hearts.toRaw()
// 红心的符号 为 "♡"

 

 

对于上面这个例子,这样可以使Suit, Rank, 和 Values的名字尽可能的短,因为它们的名字会自然的由被定义的上下文来限定。

 

 

 

本文部分原文来自于http://www.swiftguide.cn/翻译小组的译文,共同校对中。

 

感谢翻译小组成员:李起攀(微博)、若晨(微博)、YAO、粽子、山有木兮木有枝、渺-Bessie、墨离、矮人王、CXH、Tiger大顾(微博)


原始链接http://letsswift.com/2014/06/nested-types/

分享到:
评论

相关推荐

    iphone——Swift中文教程完整版

    ### Swift中文教程知识点详解 #### 一、Swift简介与特性 **1.1 关于Swift** Swift 是一种高性能、安全且易于学习的编程语言,由苹果公司在2014年首次发布。它专为iOS、iPadOS、macOS、watchOS 和 tvOS 开发而设计...

    swift语言教程

    本教程为全中文教程,基于Xcode 6.1版本,介绍了Swift的全部最新语法,覆盖了Swift编程语言的基础知识、特性、开发历史以及高级主题。 在Swift语言中,包含了多个重要的概念和特性。例如,它支持基本运算符如加、减...

    swift完整中文教程

    类型嵌套允许你在一个类型中嵌套定义另一个类型,这在处理复杂数据结构时特别有用。扩展(Extension)是Swift中一种强大的功能,它允许你在不改变原有代码的情况下为现有的类、结构体、枚举或协议添加新的功能。最后...

    Swift中文版教程

    ### Swift中文版教程知识点概述 #### 一、Swift简介与基本概念 - **Swift语言**是一种用于开发苹果设备(如iPhone、iPad等)的应用程序的编程语言,它结合了C和Objective-C的优点,并在此基础上进行了大量的改进和...

    Swift5.1中文版.pdf

    Swift的闭包有多种类型,包括全局函数、嵌套函数和闭包表达式。 Swift是被设计为一门现代语言,它的标准库包含了许多有用的模块和数据类型,如字符串(String)和数字(Int、Double、Float、Bool等)。这些类型都经过...

    Swift中文教程

    Swift中文教程是一个专门为中文学习者设计的资源,旨在帮助他们理解和掌握Apple的Swift编程语言。Swift是由Apple在2014年推出的,用于开发iOS、iPadOS、macOS、watchOS和tvOS应用程序。它的设计目标是简洁、易读、...

    The Swift Programming Language中文完整版

    《The Swift Programming Language中文完整版》是苹果公司为了介绍其新开发的编程语言Swift而编写的官方文档,内容全面、权威,并以中文形式提供给全球开发者。该文档由触控科技整理,并在CocoaChina社区中进行校对...

    Swift 入门教程-基本语法.pdf

    ### Swift入门教程——基本语法概览 #### 一、Swift简介与环境搭建 Swift 是一种高性能、安全且易于学习的编程语言,适用于开发 macOS、iOS、watchOS 和 tvOS 应用程序。它由 Apple 设计,旨在为开发者提供一个更...

    swift3.0函数手册

    2. Swift教程章节:从基础开始,包括基本运算符、字符串和字符处理、集合类型、控制流、函数、闭包、枚举、类和结构体、属性、方法、下标、继承、初始化、析构、自动引用计数(ARC)、可选链式调用等。 3. 语言参考...

    The Swift Programming Language中文版.pdf

    《The Swift Programming Language中文版.pdf》是一本由触控科技和CocoaChina整理精校的Swift编程语言官方电子书籍,其内容涵盖了Swift语言的全方位介绍,包括基础知识、进阶教程、各种特性和应用场景。这本书仅供...

    Swift 开发语言详细解读(中文版)

    - 类型嵌套:可以在一个类或结构体内部定义另一个类型。 Swift语言的高级特性包括: - 自判断链接(Safe Navigation Operator):在访问属性、方法或子脚本前,如果对象是nil,不会触发运行时错误。 - 类型转换:...

    The Swift Programming Language 中文版 - v1.8

    - **第2章 Swift教程**:提供了一个全面的Swift教程,涵盖了从基础知识到高级主题的各种内容。 - **第3章 语言参考**:深入探讨了Swift语言的具体细节,包括语法、类型系统等方面。 - **第4章 苹果官方Blog官方翻译*...

Global site tag (gtag.js) - Google Analytics