• swift:入门知识之枚举和结构体


    枚举:

    swift中的枚举有些类似于类这个概念,它有自己的属性,也可以有自己的方法

    枚举中的成员有原始值和实际值之分,原始值用来枚举成员的排序次序,默认从0开始

    枚举出来的成员值就是实际值

    可以通过toRaw和fromRaw函数转换原始值和枚举值

    也可以使用字符处或浮点数作为枚举的原始值

    枚举:

    匹配枚举值和Switch语句(Matching Enumeration Values with a Switch Statement) 

    具体举例如下:

    //给扑克牌内容声明一个枚举(A、2、3、4、5、6、7、8、9、10、J、Q、K)

    enum Rank:Int{
       case Ace
       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.Jack   //获取一个枚举元素
    let originValue = ace.toRaw()            //该元素的原始值 10
    let factvalue = ace.simpleDescription()  //该元素的实际值 Jack
    
    //将一个原始值转换为实际值
    if let origin = Rank.fromRaw(10){          // 10
        let fact = origin.simpleDescription()  // Jack
    }

     //给扑克牌的花色声明一个枚举

    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 heart = Suit.Hearts   //获取一个枚举元素
    let heartsDescription = heart.simpleDescription() //元素的实际值  hearts

    结构体:

     swift中使用struct创建结构体。结构体支持多个与类相同的行为,包括方法和构造器。

     一大重要的区别是结构体(以及枚举)代码之间的传递总是用拷贝(值传递),而类则是传递引用(地址传递)。

     对于传值调用,是把实参户值传递给形参,此时形参是要被分配空间的,而对形参做的任何操作是不会改变实参的值的;

     对于传址调用,是指传递实参的地址,即形参和实参的指针指向同一块内存区域,任何一方对数据做修改,值都会改变。

    类和结构体对比

     Swift 中类和结构体有很多共同点。共同处在于:

     定义属性用于储存值

     定义方法用于提供功能

     定义下标用于通过下标语法访问值

     定义初始化器用于生成初始化值

     通过扩展以增加默认实现的功能

     符合协议以对某类提供标准功能

     //结合上面的枚举的使用,现在声明一个扑克牌结构体,它有扑克牌内容和花色这两个枚举类型的成员变量

    struct Card {
        
        //成员属性
        var rank:Rank
        var suit:Suit
        
        //成员方法
        func simpleDescription()->String{
            return "The (rank.simpleDescription()) of (suit.simpleDescription())"
        }
    }

    //创建结构体成员实例,并调用成员方法

    //传入两个枚举类型的引用创建一个结构体成员变量
    let threeOfShapes = Card(rank: .Three, suit: .Spades)
    
    //结构体成员变量调用成员方法
    let threeOfShapesDescription = threeOfShapes.simpleDescription()   //“The 2 of shpades”

    总结:结构体和枚举是值类型

    值类型被赋予给一个变量,常数或者本身被传递给一个函数的时候,实际上操作的是其的拷贝。

     在之前的章节中,我们已经大量使用了值类型。实际上,在 Swift 中,所有的基本类型:整数(Integer)、浮点数(floating-point)、布尔值(Booleans)、字符串(string)、数组(array)和字典(dictionaries),都是值类型,并且都是以结构体的形式在后台所实现。

     在 Swift 中,所有的结构体和枚举都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。

  • 相关阅读:
    聚类算法优秀博客链接
    读安晓辉老师的访谈有感
    机器学习概览之常见算法汇总
    稀疏表达和压缩感知的一些对比
    [Linked List]Reverse Linked List,Reverse Linked List II
    [Linked List]Palindrome Linked List
    [Linked List]Remove Nth Node From End of List
    [Tree]Binary Tree Inorder Traversal
    [Tree]Binary Tree Preorder Traversal
    [stack]Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4905048.html
Copyright © 2020-2023  润新知