概述
swift-04-枚举、结构体、类
一、枚举
1、介绍
enum
:枚举是一种类型,可以像类和结构体一样,拥有自己的属性和方法
swift中的枚举,可以提供的值类型有:字符串,字符,整型值,浮点值等。这一点不同于oc,oc中是默认整型值
//定义Int类型的枚举
enum CompassPoint:Int {
case North
case South
case East
case West
}
let stt: CompassPoint = .South
//通过rawValue拿到原始值,因为是int类型,默认从0开始
print(stt.rawValue)
复制代码
通过rawValue
获取枚举值设定的原始值
注意:
- 原始值区分大小写
- 通过rawValue返回的枚举是一个可选型,因为原始值对应的枚举值不一定存在
- 如果是int类型,只指定第一个元素的原始值之后,后面的元素的原始值能够默认+1
2、使用
遍历:
//通过声明的时候添加 CaseIterable 来允许遍历
enum CompassPoint:Int, CaseIterable {
case North
case South
case East
case West
}
//通过allCases进行遍历
for method in CompassPoint.allCases {
print(method)
}
复制代码
二、结构体
1、介绍
struct
:声明结构体,内部可以声明成员变量、成员方法。因此更接近于一个类,可以说是类的一个轻量化实现
注意:
-
结构体实例总是通过值传递来定义你的自定义数据类型。
-
结构体总是通过被复制的方式在代码中传递,因此它的值是不可修改的。
-
如果要在成员方法中去改变成员属性,需要关键字mutating
2、初始化
struct Person {
var name = "Zhangsan"
var age = 10
var sex = "man"
func say(){
print("人会说话")
}
}
//初始化写法1:只有成员变量拥有默认值的时候才能使用
var p1 = Person()
//初始化写法2:重新赋值
var p2= Person(name: "Lisi", age: 20, sex: "woman")
复制代码
代码示例:
//声明:
struct Person {
var name:String
var age:Int
func introduce(){
print("我叫:(name),今年(age)岁")
}
}
//调用:
var person = Person(name: "xiaoMing",age: 20)
person.introduce()
//输出:
我叫:xiaoMing,今年20岁
复制代码
3、应用场景
- 结构体的主要目的是用来封装少量相关简单数据值。
- 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
- 任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
- 结构体不需要去继承另一个已存在类型的属性或者行为。
4、实例场景
- 几何形状的大小,封装一个width属性和height属性,两者均为Double类型。
- 一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。
- 三维坐标系内一点,封装x,y和z属性,三者均为Double类型。
不同情况的操作:
//声明方式1:直接给成员变量赋值
struct myStruct1 {
var num1 = 100
var num2 = 200
var num3 = 300
}
//声明方式2:成员变量通过初始化参数进行赋值
struct myStruct2 {
var num1: Int
var num2: Int
var num3: Int
init(mark: Int) {
self.num1 = mark
self.num2 = mark * 2
self.num3 = mark * 3
}
}
复制代码
调用:
let stu1 = myStruct1()
print(stu1.num1,stu1.num2,stu1.num3)
let stu2 = myStruct2(mark: 500)
print(stu2.num1,stu2.num2,stu2.num3)
//值拷贝
var stu3 = stu2
print("修改前: (stu3.num1)")
stu3.num1 = 600
print("修改后: (stu3.num1)")
复制代码
打印:
100 200 300
500 1000 1500
修改前: 500
修改后: 600
复制代码
三、类
1、介绍
class
: swift中用class
关键字定义类,通过.(点语法)
进行访问类的属性和方法
2、使用
定义:
class Person {
var name = "Zhangsan"
var age = 10
func say(){
print("(name)说话了")
}
}
//调用
var p1 = Person()
p1.say()
复制代码
注意:类默认没有自动实现构造函数,如果声明成员变量的时候没有赋值,就需要实现构造函数来进行赋值,否则无法编译
class Person {
var name : String
var age : Int
init(name : String, age : Int) {
self.name = name
self.age = age
}
}
//调用
var p1 = Person(name: "zhangsan", age: 10)
复制代码
四、 struct
和 class
比较
struct是结构体,class是类
- 1、struct是值类型,class是引用类型;意思是:声明一个新的变量指向这个结构体,改变某个属性,原本的结构体属性不会发生变化;而类会随着改变
代码示例:
struct myStru {
var width = 200
}
class myClass {
var width = 200
}
//调用
var stu = myStru()
var stu2 = stu
stu2.width = 300
print(stu.width,stu2.width)
//200
300
var cls = myClass()
var cls2 = cls
cls2.width = 300
print(cls.width,cls2.width)
//300 300
复制代码
-
2、struct不能被继承,class可以被继承
-
3、用let修饰class对象,能够修改类的值;若要修改struct的值,要用var来修饰
-
4、struct是放在栈上,class是放在堆上,因此struct的访问速度更快
-
5、struct里面如果想声明一个func来修改声明的属性,需要添加关键字mutating,才能编译成功;而class不需要
-
6、所有的struct都有一个自动生成的成员构造器,而class需要自己生成
-
7、在struct中,成员变量可以没有初始值;但在class中,如果成员变量没有初始值,就必须为它写一个构造函数
最后
以上就是土豪冬天为你收集整理的swift-04-枚举、结构体、类swift-04-枚举、结构体、类一、枚举二、结构体三、类四、 struct和 class比较的全部内容,希望文章能够帮你解决swift-04-枚举、结构体、类swift-04-枚举、结构体、类一、枚举二、结构体三、类四、 struct和 class比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复