博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift学习笔记->结构与枚举
阅读量:5214 次
发布时间:2019-06-14

本文共 2037 字,大约阅读时间需要 6 分钟。

先看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 = .Maleswitch 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.Xgoods.rawValuelet goods1 = Status.UnApprovedgoods1.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        }    }}

 

转载于:https://www.cnblogs.com/pengser/p/4972721.html

你可能感兴趣的文章
bzoj2259 [Oibh]新型计算机
查看>>
对位与字节的深度认识
查看>>
C++编程基础二 16-习题4
查看>>
MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
查看>>
服务器被疑似挖矿程序植入107.174.47.156,发现以及解决过程(建议所有使用sonatype/nexus3镜像的用户清查一下)...
查看>>
类型“XXX”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。
查看>>
JQuery 学习
查看>>
session token两种登陆方式
查看>>
C# ArrayList
查看>>
IntelliJ IDEA 12集成Tomcat 运行Web项目
查看>>
java,多线程实现
查看>>
个人作业4-alpha阶段个人总结
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
递归-下楼梯
查看>>
实用的VMware虚拟机使用技巧十一例
查看>>
监控工具之---Prometheus 安装详解(三)
查看>>
Azure Iaas基础之---创建虚拟机
查看>>
不错的MVC文章
查看>>
网络管理相关函数
查看>>
IOS Google语音识别更新啦!!!
查看>>