美文网首页
swift语法总结(枚举类型与结构体)

swift语法总结(枚举类型与结构体)

作者: coder_xiang | 来源:发表于2019-03-25 15:59 被阅读0次

枚举类型的介绍

概念介绍

  • 枚举定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这些值。
  • 在 C/OC 语言中枚举指定相关名称为一组整型值
  • Swift 中的枚举更加灵活,不必给每一个枚举成员提供一个值.也可以 提供一个值是字符串,一个字符,或是一个整型值或浮点值
  • 枚举类型的语法
    使用enum关键词并且把它们的整个定义放在一对大括号内
enum SomeEnumeration {
// enumeration definition goes here
}

枚举类型的定义
以下是指南针四个方向的一个例子

  • case关键词表明新的一行成员值将被定义
  • 不像 C 和 Objective-C 一样,Swift 的枚举成员在被创建时不会被赋予一个默认的整数值
  • 在下面的CompassPoints例子中,North,South,East和West不是隐式的等于0,1,2和3
enum CompassPoint {
  case North
  case South
  case East
  case West
}

定义方式二:多个成员值可以出现在同一行上

enum Planet {
  case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}

给枚举类型赋值

  • 枚举类型赋值可以是字符串/字符/整型/浮点型
  • 注意如果有给枚举类型赋值,则必须在枚举类型后面明确说明具体的类型
// 1.枚举类型的赋值
enum CompassPoint : Int {
  case North = 1
  case South = 2
  case East = 3
  case West = 4
}

enum Planet {
  case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}


// 2.枚举类型的使用
let p = Planet(rawValue: 3)

if let p = p {
    switch p {
    case .Mercury:
        print("Mercury")
    case .Venus:
        print("Venus")
    case .Earth:
        print("Mercury")
    case .Mars:
        print("Mars")
    case .Jupiter:
        print("Jupiter")
    case .Saturn:
        print("Saturn")
    case .Uranus:
        print("Uranus")
    case .Neptune:
        print("Neptune")
    }
}

结构体

结构体的介绍

  • 概念介绍
    • 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合
    • 结构体(struct)指的是一种数据结构
    • 结构体是值类型,在方法中传递时是值传递
  • 结构的定义格式
struct 结构体名称 {
    // 属性和方法
}

为什么需要结构体?

  • 先来看一个例子
    • 我们要计算平面坐标里某个点距点Center的距离是否小于200
    • 算起来很简单,勾股定理就搞定了:
      • 其中sqrt(n)用来计算n的平方根
      • pow(x, n)用来计算x的n次方
let centerX : Double = 100
let centerY : Double = 100

func inRange(x : Double, y : Double) -> Bool {
    let disX = x - centerX
    let disY = y - centerX

    let dis = sqrt(pow(disX, 2) + pow(disY, 2))

    return dis < 200
}

let x : Double = 100
let y : Double = 1000

inRange(x, y: y)

  • 问题
    • 但是这样有一个不足,当我们需要比较很多个点和Center的距离的时候,这些数字并不能明确告诉我们它们代表的位置的意义,甚至我们都无法知道它们代表一个数字。
    • 如果我们可以像这样来比较位置:
      • 相比数字,它们看上去就会直观的多
      • 而这,就是我们需要自定义struct类型最直接的原因
inRange(location1)
inRange(myHome)

  • 使用结构进行改进
// 初始化结构体
struct Location {
    var x : Double
    var y : Double
}

// 创建结构体
let location = Location(x: 90, y: 90)

// 优化刚才的方法
func inRange(location : Location) -> Bool {
    let disX = location.x - centerX
    let disY = location.y - centerY

    let dis = sqrt(pow(disX, 2) + pow(disY, 2))

    return dis < 200
}

inRange(location)

结构体的增强

  • 扩充构造函数
    • 默认情况下创建Location时使用Location(x: x值, y: y值)
    • 但是为了让我们在使用结构体时更加的灵活,swift还可以对构造函数进行扩充
    • 扩充的注意点
      • 在扩充的构造函数中必须保证成员变量是有值的
      • 扩充的构造函数会覆盖原有的构造函数
struct Location {
    var x : Double
    var y : Double

    init(x : Double, y : Double) {
        self.x = x
        self.y = y
    }

    init(xyString : String) {
        let strs = xyString.componentsSeparatedByString(",")
        x = Double(strs.first!)!
        y = Double(strs.last!)!
    }
}

let location = Location(x: 100, y: 100)
let location1 = Location(xyString: "100,100")

  • 为结构体扩充方法
    • 为了让结构体使用更加灵活,swift的结构体中可以扩充方法
    • 例子:为了Location结构体扩充两个方法
      • 向水平方向移动的方法
      • 向垂直方向移动的方法
struct Location {
    var x : Double
    var y : Double

    init(x : Double, y : Double) {
        self.x = x
        self.y = y
    }

    init(xyString : String) {
        let strs = xyString.componentsSeparatedByString(",")
        x = Double(strs.first!)!
        y = Double(strs.last!)!
    }

    mutating func moveH(x : Double) {
        self.x += x
    }

    mutating func moveV(y : Double) {
        self.y += y
    }
}

  • 注意:
    • 如果我们使用的Location不是自己定义的,但是我们仍旧希望在自己的项目里扩展Location的操作
    • Swift也能帮我们达成,这个机制,叫做extension
extension Location {
    mutating func moveH(x : Double) {
        self.x += x
    }

    mutating func moveV(y : Double) {
        self.y += y
    }
}

相关文章

  • Swift最新语法总结

    swift最新语法总结(函数) swift最新语法总结(枚举类型与结构体) swift最新语法总结(类的使用) s...

  • 基本语法

    swift基本语法 五种类型 枚举(enum),结构体(struct),类(class),协议(protocol)...

  • swift语法总结(枚举类型与结构体)

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

  • Swift Tour Learn (六) -- Swift 语法

    Swift语法基础(五)-- (类和结构体、属性、方法) 本章将会介绍 类和结构体对比结构体和枚举是值类型类是引用...

  • swift3.0- 枚举

    Swift枚举 Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像类和结构体一样...

  • 枚举

    Swift枚举:Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像类和结构体一样...

  • Nested Types

    为了表示更复杂的结构,swift中类、结构体和枚举可以使用内嵌类型 在结构体中嵌套枚举的复杂实例 //Neste...

  • 日常随笔第八弹-枚举/结构体/可选类型

    枚举 可选类型(!与?) 结构体

  • 01 数据类型

    swift中结构体在haskell中的描述 枚举类型在haskell中的描述 枚举携带类型在haskell中描述 ...

  • swift-structure、enumeration、clas

    swift的三种类型:结构体(structure)、枚举(enumeration)、类(class)其中引用类型为...

网友评论

      本文标题:swift语法总结(枚举类型与结构体)

      本文链接:https://www.haomeiwen.com/subject/qwfbvqtx.html