
Swift Tips
使struct支持 == 操作符
如果直接使用struct进行比较的话,一般会得到如下警报:

错误的大致意思就是 ‘==’这个操作符不能被作用于这里的’myStruct’类型的数据上.
解决方式就是,使myStruct遵循Equatable协议,并且实现==方法,代码如下:

如图,在==方法内部,依次比较struct内的所有元素即可.
20180811更新:
在Swift 4.2之后,当结构体内所有元素全都遵循Equatable或者Hashable等等协议时,结构体本身会自动遵循对应的协议,不需要再写多余的代码。
enum模式匹配
Swift中的enum支持关联值,如果要匹配enum并取出关联值,官方给出的方式是依赖于switch语句,类似于下面这个:

但是这种写法非常笨重,每次想获取关联值的时候,总不能每次都写switch语句吧? 其实我们可以这样写:

那么同时我们也可以使用where从句来配合使用:
判断当title为”标题”时,才可通过匹配:


配合guard语句使用:

除去上面的 ‘if case let’ ,’if case let where’以及’guard case let’语句以外,还存在一个’for case’:

同样也可以配合where从句使用:

使用Markdown来为Xcode编写代码文档
随着Xcode的更新,我们现在可以用Markdown来写富文本格式的代码文档了.
Markdown的基础语法,可以参见这里或者这里.
在使用Markdown编写文档之前,有一些规则是需要遵守的,文档需要写在注释(/** */内部或者///后面)内部.
比如这样:

文字两边加两个星号是用来强调文字语气的,可以看到前面四个字已经加粗了字体.
无序列表样式,可以这样:

这里的文档不仅仅可用于按住option键弹出的快速预览,也可用于位于Xcode右边栏的快速帮助内,就像这样:

不光这样,还可以添加一个超链接进去:

并不只有这样,Xcode在解析Markdown的时候还内置了一些关键字,这些关键字可更好的配合文档注释展示更加完美的效果,这些关键字包括parameter以及returns,分别表示参数部分以及返回值部分,其使用方式以及实现效果如下:

坏消息是关键字没有缩写,好消息是如果你安装了VVDocument插件的话,这些东西会自动生成0.0
enum关联值
要想给一个enum绑定其他值,有两种方式可以实现,第一种是以rawValue的形式,像是这样:

第二种方式,直接将对应的关联值在case后面使用括号关联,可关联多个值,但是相对的,如果使用这种方式的话,其枚举值就不能使用rawValue了,写法像这样:

需要注意的是,如果你是用的是OC与Swift混编的话,最好不要使用第二种关联值的方式,因为这是OC并不支持的类型,导致你在OC里面根本找不到你在Swift文件中写的这个枚举类型.
defer关键字
defer的字面翻译的意思是推迟,延期的意思,其实现的效果也是这个意思,其语法结构是:
1 | defer { |
大括号内部就是需要延迟执行的代码块,其实现原理借助于栈操作,在一个函数(或语句块,代码块)内部,最前面的defer语句将被最先加入栈中,最后面的defer语句将被最先从栈中弹出,并执行其中的代码,注意执行defer语句将会在函数返回之后逐个执行.
当设置和清理工作成对出现的时候,你就可以使用defer语句,比如这样:
1 | //连接数据库 |
这个例子中,提交数据库事务以及与数据库断开连接的操作将在函数返回之后执行.
- 标题: Swift Tips
- 作者: Aron
- 创建于 : 2016-06-07 12:36:41
- 更新于 : 2025-10-14 09:29:25
- 链接: https://likeso.github.io/2016/06/07/swift-tips/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。