我是靠谱客的博主 土豪冬天,最近开发中收集的这篇文章主要介绍swift-04-枚举、结构体、类swift-04-枚举、结构体、类一、枚举二、结构体三、类四、 struct和 class比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部