Swift 基础 Swift才有的特性
时间:2023-01-13 05:00:00
我一直觉得我写的不是技术,而是感情。教程是我一路上的痕迹。专业技能的成功是最可复制的。我希望我的路能让你少走弯路。我希望我能帮助你抹去知识的尘埃。我希望我能帮助你澄清知识的背景。我希望你和我在未来的技术之巅。
前言
本文介绍swift相对oc,swift独特的用法,结合开发的需要,其实swift有得用法,OC很多都没有的,只是我用到的记录一下。
正题
internal
internal的属性使用
internal修改的属性总是只有一个对象地址,就像单例一样
class Service { internal static let name = "fenghanxu" }
使用属性的控制器A
使用属性的控制器B
打印结果
A属性地址为: 0xb21b7768d2b563c4 B属性地址为: 0xb21b7768d2b563c4 A属性地址为: 0xb21b7768d2b563c4
throws
当我们使用系统方法时,我们经常看到系统的写作方法被使用throws修改这种方法的属性。例如:看下图。
若该方法有用throws如果修改,使用时需要抛出异常。
使用这种方法通常有两种常见的方法:
使用方式1:
使用方式2:
guard
在swift开发中guard很常见,一般使用情况都是,比如:A属性不确定是否值,但下面需要使用A值。如果A没有,它就不能继续下去。所以需要使用guard拆包A看是否值得,比如看下面的代码。
因为num_0不确认是否值=,因此,使用前需要拆包
第二个是用guard常用的地方是闭包。
说明为什么要对self进行拆包,因为闭包回来之后当前的self我不知道它是否还存在。如果它被释放,它就不能正确self操作中的属性,因此正在使用中self先对属性self拆包,如有self走下去。不退出。
若不拆包使用self都会带 问号(?) 例如:查看下面的代码
()使用问号
什么情况下属性背后有问号?这个比较简单
例如,如果上面的图片,tableview它是以下图片形式创建的,使用时会tableview后面带问号。因为使用这个对象的时候,并不知道它已经实力化对象没有,如果没有就不设置相关属性,如果实力化才设置。
那么,使用上图来创建属性的一般需求是什么呢?
在控制器中,需要弹出一个框,只有在需要使用时才能创建。如果创建属性的方式是以上图片的形式创建,则在使用该框后将其删除。
使用双问号()
从上图可以看出,我们需要把它放在上面height赋值给对象statusBarHeight,但是height是从statusBarManager但是statusBarManager如果不存在,我不知道它是否存在,height但是statusBarHeight确认需要一个值。因此,使用值时需要在后面带一个 如果height如果你得不到值,你会得到双问号背后的默认值。
if let (可选绑定)
可选绑定很常用,跟随guard使用是相反的。当不确定是否有价值时,如何使用可选绑定,如果拆包有价值if在里面,如果没有价值,就不要进去。
实现swift的set get方法
这个OC还有一些,只是记录如何写
顺便写一下oc语言set get的写法
.h
.m
oc中set一般用于给予cell得ui使用最频繁的控件赋值。例如,下图
oc中get用法是判断模型中是否没有nil,一个默认值的初始化,图
属性监视器 监控属性的变化
方法赋值问题
看下面的例子:本来想传递方法的playerModel,保存累的属性playerModel用在里面,却报错了。
有两种方法可以修改:
1.一般偏用:前加:self区分
2.修改局部变量名称
Equatable (模型比较)
Equatable源码例子
比较两个模型是否一致
一般用于网络开发的数据是否一致,如果不一致,则更换新数据。
Codable(JSONEncoder JSONDecoder)
转换成模型数据data