Swift之枚举类型&结构体
2016-05-04 10:33
381 查看
枚举类型
枚举类型的介绍
概念介绍
枚举定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这些值。在 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.枚举类型的赋值
// 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.枚举类型的使用
// 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算起来很简单,勾股定理就搞定了:
![](https://images2015.cnblogs.com/blog/931752/201605/931752-20160504103024279-1385075144.png)

其中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 post json and header
- ipad版Qzone(纯swift编写)
- Google Android或采纳苹果的Swift编程语言:避开Java这个坑?
- swift中提供属性监听器,可以监听属性的改变
- swift设置UIButton的title文字
- 使用swift解析json
- Swift - 使用NSURLSession同步获取数据(通过添加信号量)
- swift 基础语法 (一)
- Swift 不完全函数第 2 部分:捕获前置条件错误
- Swift 不完全函数第 1 部分:如何避免
- Hello,服务端 Swift
- Swift与OC中拷贝与可变性
- Swift-数组
- Swift的protocol与协议扩展
- swift中字符串截取方法(substring)
- Swift2.0系列]Error Handling(项目应用篇)
- Swift 可选代理实现 怎么写?
- Swift 根据文字字体的大小得到size
- Swift 自动布局
- Oc与Swift混编------如何创建头文件(桥接)