八、swift3.0枚举和结构体
来源:互联网 发布:佛山mac专柜 编辑:程序博客网 时间:2024/05/23 19:20
一、枚举
swift中枚举用于管理一组有限的值的集合
特征:
支持计算属性
支持实例方法和类实例方法来初始化
允许通过扩展来增加原枚举的功能;允许协议来制定标准功能
1、定义枚举
enum <name> { case <case>}
定义枚举时,枚举名一般首字母大写,其它都小写swift的枚举值不会被默认分配整数值
enum Weekday { case Monday case Tuesday case Wednesday case Thursday case Friday case Saturday case Sunday } enum Weekday2 { case Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }
var day : Weekday day = .Sundayday = Weekday.Monday
3、设置枚举实例的原始值
通过原始值给枚举实例指定,如Int、Double、Float、Character、String类型的值
枚举实例要么全部指定原始值,要么都不指定;如果指定部分值为Int类型时,会按照大小推导;如果指定类型为Character类型时,则不能推导,需要全部指定;如果指定部分值类型为String时,则其它默认为隐式枚举值,即枚举实例名本身。
enum Season : Character { case Spring = "S" case Summer = "U" case Fall = "F" case Winter = "W" }
swift中可以给不同枚举实例成员指定数量不等、类型不同的关联值
//1、定义关联值的枚举 enum Person { case Mercury(weight:Double, density:Double, name:String) case Venus(Double, String) case Saturn }
//2、访问关联值的枚举 var p1 = Person.Mercury(weight: 0.12, density: 0.123, name: "123213") var p2 = Person.Venus(0.234, "fgf") var p3 = Person.Saturn switch p2 { case Person.Venus(let D1, let S1): print("p2的值为\(D1), 另外的值为\(S1)") default: break }
5、递归枚举
即枚举的关联值类型为该枚举本身,该枚举实例必须用indirect关键字修饰
indirect enum Weekday { case Monday(next: Weekday) case Tuesday case Wednesday case Thursday case Friday case Saturday case Sunday }
二、结构体
swift的结构体和类非常相似,结构体是值类型,而类是引用类型。
当创建结构体时,如果实例存储属性显式指定了初始值,或者定义为可选类型,且没有提供任何任何构造器时,系统会默认创建一个有参和无参构造器方法;否则,系统只为其提供一个初始化有参的构造方法。
在定义结构体时可以使用如下修饰符:
访问权限修饰符:private | internal | public类型成员修饰符:class | static
[修饰符] struct name { 构造器方法 属性 方法 下标 }
1、结构体的基本使用
class ZMView: UIView { internal struct Dog { var name : String! var age : Int! func run() { print("\(name)跑得很快!") } } //使用系统默认创建的有参构造器 var dog = Dog(name: "阿黄", age: 2) //使用无参构造器 var dg = Dog() func demo() { print(dog.name) }}
注:当我们定义一个let声明的结构体常量时,那么该不可变结构体实例的属性是无法修改的,如下代码修改其值是错误的:
struct Person { var name : String var age : Int } let p = Person(name: "zhangsan", age: 18) p.age = 20
2、定义结构体中的属性
internal struct Dog { var name : String! var age : Int! func run() { print("\(name)跑得很快!") } } //使用系统默认创建的有参构造器 var dog = Dog(name: "阿黄", age: 2) //2、定义结构体中的属性 struct Person { //存储属性 var name : String var age : Int //懒加载属性 lazy var dg = Dog(name: "ahuang", age: 2) //计算属性 var weight : Int { get { print("可以在这里里面做些相关的限制") return 22 } set (newWeight) { print("可以做相关的逻辑控制") self.weight = newWeight + 20 } } }
3、改变结构体属性的值
swift中结构体和枚举的实例方法是无法改变其存储属性的,需要在该实例方法前面加上mutating关键字才可以修改。
struct Fseasons { var x : String mutating func sumStr(x1: String, y1: String) { self.x = x1 + y1 } } var sea = Fseasons(x: "hha") sea.sumStr(x1: "123", y1: "456") print("----\(sea.x)-----")
4、结构体的下标
swift中枚举、结构体、类都支持定义下标,利用下标来简化访问对象的简化方式。
用subscript关键字定义下标;
同一个类型可以定义多个下标,通过下标的形参列表活返回值类型来区分不同的下标;
同一类型中定义多个不同的下标,称为下标的重载;
下标和计算属性非常相似,下标的定义如下:
subScript(形参列表) -> 下标返回值类型 { get { //下标返回值 } set { //通过形参获取返回值 }}
4.1、定义一个结构体的下标
struct Fseasons { var x : String var a : Int var b : Int //定义一个下标 subscript(index : Int) -> Int { get { switch index { case 0: return self.a default: return self.b } } set { switch index { case 0: self.a = newValue default: self.b = newValue } } } }
4.2、利用下标访问结构体的属性
var rect = Fseasons(x: "123", a: 0, b: 2) //通过下标对rect里面的属性赋值 rect[0] = 100 rect[100] = 0 //通过下标访问属性 print("a的值为:\(rect[0]), b的值为:\(rect[2])")
阅读全文
0 0
- 八、swift3.0枚举和结构体
- Swift3.0-枚举(enum)和结构体(struct)
- C语言学习入门 (八) 结构体和枚举
- Swift3.0中文教程: 9.类和结构体
- swift3.0 枚举
- 结构体和枚举
- 枚举和结构体
- 二十三 Swift3.0之 结构体
- C++深入体验之旅八:枚举类型和结构体
- swift3新路程(9)结构体和类
- 结构体、枚举和联合体
- swift 枚举和结构体
- Swift-枚举和结构体
- 联合 枚举和结构体
- 结构体和枚举类型
- Swift枚举和结构体
- 结构体,联合和枚举
- C#枚举和结构体
- 用户空间和内核空间通讯之【Netlink 】
- string类中字符的大小写转换
- MATLAB图像处理-高斯/拉普拉斯/均值/中值滤波
- 聊聊Vue.js的template编译
- angularjs中多个控制器中共享数据
- 八、swift3.0枚举和结构体
- PyQt5学习笔记3_PyInstaller生成exe
- stdafx有什么用(包含相关问题分析)
- mysql之repair table 修复表札记
- mac自身支持ntfs的读写
- [leetcode] 447. Number of Boomerangs
- MyEclipse快捷键大全
- HDU2159 FATE(动态规划)
- 算法之快速排序