Swift的可选链,类型转换和扩展

2023-05-16


可选链(Optional Chaining)

可选链是一种请求或调用属性,方法,子脚本的过程。
可选性体现于请求或调用的目标当前可能为nil.若不为nil则成功调用,否则返回nil并将链失效。
调用可选链的返回结果与原结果类型相同,但是被包装成为了一个可选类型Optional.
这里由于roomCount返回为nil 所以执行else语句为count赋值为-1.
标注:在Beta3版本发布时对Swift稍微进行了修改,nil变成了关键字,而不再存在NilType的nil了。
可选链可以连续多层调用,假设例子:
john.residence?.address?.street?.description()
若有方法返回optional则?在括号后面。

类型转换

类型转换是一种检查实例类型的方式,也是让实例作为父类或者子类的一种方式。
在Swift中使用is或as来判断和推断他们是否为某个类或者某个协议。
is用于检查一个实例是否属于特定子类型,若果是则返回true不是则为false.注意这里是特定子类型,如果你定义了一个类并实例化它,然后检查它是否is这个类,编译器会报错告诉你这个is总是返回true.

向下转型

因为向下转型可能会失败,类型转换操作符会有两种不同的形式。
as? 返回一个optional value,即不成功返回nil。
as   则把向下转型和强制解包结合,不成功则运行时错误。
向下转换和OC,Java中的强转一样,并没有真正的改变实例,只是简单的把它告诉编译器当做这个类来使用而已。

Any和AnyObject

Swift中没有像NSObject一样的所有类基类。但有AnyObject可以表示任何class类型的实例。Any可以表示任何类型,除了方法类型。
当需要使用CocoaAPIs,一般接收一个[AnyObject]的数组,因为oc中没有明确类型的数组,其中存储的指针可以指向任何类的实例。
使用Any类型来和混合的不同类型一起工作,包括非class.

嵌套类型

Swift中是支持嵌套类型的,就像支持嵌套函数一样灵活。你可以在枚举,类和结构体中定义支持嵌套的类型。

扩展(Extension)

扩展就是类似于Objective-C中的Category,不过Swift中的扩展没有名字。
下面列举Swift中的扩展可以做的事情:
--添加计算型属性和计算静态属性
--定义实例方法或类型方法
--提供新的构造器
--定义下标脚本
--定义和使用新的嵌套类型
--使一个已有类型符合某个协议

语法

使用关键字extension
extension SomeType { ... }
适配协议:
extension SomeType: SomeProtocol, AnotherProtocol { ... }
也称为在扩展中添加协议遵循者。

添加计算型属性

注意:扩展可以添加新的计算型属性,但是不能添加存储型属性,也不可以向已有属性添加属性观测器。
当然我们可以通过设置关联引用的方式来添加一个“属性”,需要用到Swift调用CPointer的知识以及objc/runtime的关联引用,当然这也不是真正意义的属性,而只是一个关联。

构造器

扩展能向类中添加新的便利构造器,但不能添加新的指定构造器或者析构函数。
若使用扩展提供了一个新的构造器,有责任保证构造过程中让所有的实例都完全初始化。

方法

使用扩展为Int增加了一个方法,注意到这里的..<取代了当初的.. 这是在beta3时苹果对Swift语法做出的修改,主要是为了区分左闭右闭还是右开。
也可以在扩展中修改实例
下标脚本
甚至还可以在扩展中增加嵌套类型。
示例代码请点击 这里
以上就是本篇博客全部内容,欢迎勘误和讨论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift的可选链,类型转换和扩展 的相关文章

随机推荐

  • 安装oh-my-posh 将PowerShell 更改为 oh-my-zsh 样式

    目录 安装oh my posh 将PowerShell 更改为 oh my zsh 样式安装 oh my posh支持中文设置主题 安装oh my posh 将PowerShell 更改为 oh my zsh 样式 参考文章 xff1a p
  • IDEA导入springboot gradle文件详解及错误解析

    一 准备环境 1 jdk1 8 11都可以 验证安装成功 win 43 R cmd 输入java version 出现版本即为成功 2 idea注意社区版是不支持springboot的 xff0c 需要安装插件 xff0c 我改成了其他版本
  • Linux网络相关的命令、firewalld和netfilter、netfilter5表5链介绍、iptables语法

    一 Linux网络相关的一些命令 1 查看网卡的命令 ifconfig a ip addr 这两个命令都可以查看网卡 xff0c 当网卡down掉的时候是看不到的 xff0c 使用 a可以查看到 ifdown ifup 43 网卡名 可以关
  • 电子邮件使用中常见错误提示解释

    电子邮件使用中常见错误提示解释 电子邮件使用中常见错误提示解释 xff0d xff0d 发信 收信和退信 引言 xff1a 在使用电子邮件的过程中经常会出现邮件无法 发出 xff0c 发出后被退回 xff0c 或者无法收取邮件的提示 邮件系
  • 简单搭建ESXI服务器管理系统

    简单搭建ESXI服务器管理系统 esxi全称 VMware ESXi xff0c 是可直接安装在物理服务器上的强大的裸机管理系统 xff0c 是一款虚拟软件 xff1b ESXi本身可以看做一个操作系统 xff0c 采用Linux内核 xf
  • Centos安装Nodejs简单方式

    Node js 是一个基于 Chrome V8 引擎的 JavaScript 运行时 本文主要讲的是如何在Linux即Centos上安装Nodejs的简单方式 xff0c 有比设置环境变量更加简单的方式 xff0c 那就是设置软链接 xff
  • 部署Docker管理面板Portainer

    相信很多人都会遇到部署了docker后想要有个可以管理的控制台 xff0c 方便我们对docker服务进行管理 xff0c 查看日志 查看内存占用等等 xff0c 虽然docker命令都能查看 xff0c 但是肯定没有图表可视化等来得更有效
  • 不忘初心•砥砺前行——江苏叁拾柒号仓智能科技有限公司2019年中总结会

    2019年7月20日上午 xff0c 江苏叁拾柒号仓智能科技有限公司 下称37号仓 2019年中总结会在集团1楼多媒体厅隆重举行 xff0c 37号仓执行董事魏标 xff0c 总经理卞石磊 xff0c 子雨集团党支部书记 工会主席徐伟 xf
  • 前后端分离开发工具YAPI部署记录

    之前公司说要建立起前后端分离开发模式 xff0c 而我只是刚毕业 xff0c 让我负责建立起这个规范 xff0c 虽然刚毕业还没去大厂待过 xff0c 对我来说是个挑战 xff0c 只能按我理解和网上的方案进行建立 在 Google 和 g
  • Docker定时删除none镜像

    在使用docker的时候会产生none镜像文件 xff0c 偶尔没什么 xff0c 但是比如使用了自动化部署工具那就不一样了 xff0c 一天没准就上百个none镜像了 xff0c 非常消耗资源 xff0c 所以需要定时清理 删除 none
  • 升级黑苹果EFI内OpenCore和驱动等

    之前给我电脑适配过黑苹果EFI xff0c 是在前辈放弃的项目上适配的 我测试使用的时候各种bug xff0c 经过我的修复接近完美 xff0c 但是由于wifi网速慢一直没用 xff0c 今天看到itlwm更新日志里面有对我电脑网卡进行性
  • 通过 VNC 客户端远程连接 CentOS 7 图形化界面

    文章目录 一 场景介绍二 名词解释三 CentOS 图形安装四 VNC 服务端安装五 VNC 客户端连接 一 场景介绍 在某些特定场景下 xff0c 我们需要通过 Linux 环境来调试代码 xff0c 比如 Shell 脚本的调试 如果每
  • CAAnimation——基本动画,关键帧动画和贝塞尔路径

    概述 在做对于图层的动画效果时 xff0c 往往直接改变属性或者使用隐式动画是不能满足我们的需求的 xff0c 所以我们就用到了显式动画 xff0c CAAnimation 它可以管理重复动画 准确的控制时间和步调 xff0c 并且能设定图
  • IOS详解TableView——性能优化及手工绘制UITableViewCell

    提高表视图的性能 UITableView作为应用中最常用的视图 xff0c 它的性能优化问题几乎是经常提及 下面对在非网络访问情况下的表视图性能优化进行了主要的几点说明 xff1a 1 自定义类或XIB文件时 在系统提供的样式不能满足我们的
  • IOS详解TableView——实现九宫格效果

    根据需求九宫格的效果可以有很多种 九宫格效果应用比较广泛 xff0c 实现也多种多样 xff0c 比如选项抽屉效果 这里写了一个在UITableView上显示九宫格效果的Demo 思路 xff1a 在Cell上初始化自定义按钮 xff0c
  • IOS详解TableView——内置刷新,EGO,以及搜索显示控制器

    这几天因为住的地方的网出了一点问题 xff0c 除了能上Q xff0c 上微博以外其他的网页全都无法登陆 博客也就没有跟进 今天恢复了 xff0c 所以继续更新博客 也希望大家能继续评论或私自给我一些建议或者交流 今天找到了以前一个Tabl
  • IOS回调机制——代理,通知中心以及Block

    Xcode5 0正式版 IOS7和Xcode5正式版在昨天正式可以下载 IOS7不多说了 xff0c 交互设计 xff0c 界面风格 xff0c 操作的简化程度都属于比较领先的水平 这里来说说Xcode5正式版 xff0c 和以前的Xcod
  • IOS飞机大战OC版

    前一阵子看到了很多版本的打飞机游戏 xff0c 有Java版的C 43 43 版本的还有C语言版的 这几天闲着的时候写了一个OC版的 xff0c 也正好是因为答应朋友写这个游戏来把飞机都换成他照片 没有用Cocos2d框架 xff0c 用的
  • stack corruption detected (-fstack-protector)

    栈发生错误崩溃问题调查 android 升级 ndk版本后 xff0c 一些操作后导致 so崩溃 xff0c 具体堆栈如下所示 00 pc 00065648 apex com android runtime lib bionic libc
  • Swift的可选链,类型转换和扩展

    可选链 Optional Chaining 可选链是一种请求或调用属性 xff0c 方法 xff0c 子脚本的过程 可选性体现于请求或调用的目标当前可能为nil 若不为nil则成功调用 xff0c 否则返回nil并将链失效 调用可选链的返回