先看swift的结构, 与C语言中学习的结构类似
不同之处在于实例化语法和函数方法
struct Point { var x = 0 var y = 1 mutating func change (newX:Int,newY: Int) { x = newX y = newY } } var p = Point() p.change(10, newY: 20) p.x
定义一个结构与C语言中学到的一样,实例化时就像之前swift学到的函数调用
与C语言另一个不同之处是swift的结构体中可以写函数方法,而C语言不能
构造函数会自动添加一个初始化所有属性的构造方法,比如刚才代码调用方式可以这样
var p1 = Point(x: 5, y: 6)
值得注意的是 swift结构体是值类型,这里就不举例了
什么时候用结构呢?
当一个或一组值类型,其中的元素和属性未来不会更改时用结构
其他时候建议用类 calss
来看看枚举
有其他语言基础的朋友们应该了解一些枚举,下面是枚举的定义语法
enum Gender { case Male case Female }
枚举怎么使用呢? 举个简单的例子
enum Gender { case Male case Female } let weidong: Gender = .Male switch weidong { case .Male: print("男人") case Gender.Female: print("女人") }
噢不 你说switch语法好像不太对?
是的swift中的switch语法不太一样 与C语言的区别在于 不需要break 满足条件执行 执行完毕自动退出,并且需要默认选项default 不写会报错,
只有在对枚举类型进行判断时只要把所有case可能性都写齐便可省略default
下面看枚举关联类型
enum Gender { case Male(String) case Female(Int,String) //表示可以关联任意类型,每个case关联的数据可以不一样 } let wd = Gender.Male("男") switch wd { case .Male(let x): print("zhe shi ge (x)") case .Female: print("nv") } let hy = Gender.Female(18, "zhanghongyan") switch wd { case .Male(let x): print("zhe shi ge (x)") case let .Female ( x , y): //相当于x与y都是let print("nv") }
相信大家通过代码都能看懂了枚举的每个case情况都可以关联一个或多个类型,要使用类型可以再switch case中定义变量 语法也很好记
原生值
enum Status :Int{ //原生值,所有原生值都必须唯一 case UnApproved case Approved case X = 4 //=1 就报错 case Y case XX } // let goods = Status.X goods.rawValue let goods1 = Status.UnApproved goods1.rawValue
默认情况下Int类型原生值会从0开始自增长 当然也可以在定义的时候去设置比如case X 之后的case会随你设置的数自增
.rawValue方法能访问原生值 当然原生值也能设置为其他类型 具体大家自己去试验
关键字mutating
当结构中有函数方法 函数方法又要修改结构中某一属性的值时 编译器会抛出错误
struct s{
var a=0
var b=0
func set(a:Int,b:Int){
self.a=a
self.b=b
}
}
此时我们就需要在函数的前面加上mutating关键字进行修饰
在枚举中也是如此 修改self的值
enum TriStateSwitch { case Off, Low,
High mutating func next() { switch self { case Off: self = Low case Low: self = High case High: self = Off } } }