1,as使用场合

(1)从派生类转换为基类,向上转型(upcasts)

class Animal {}
class Cat: Animal {}
let cat = Cat()
let animal = cat as Animal

(2)消除二义性,数值类型转换

let num1 = 42 as CGFloat
let num2 = 42 as Int
let num3 = 42.5 as Int
let num4 = (42 / 2) as Double

(3)switch 语句中进行模式匹配

如果不知道一个对象是什么类型,你可以通过switch语法检测它的类型,并且尝试在不同的情况下使用对应的类型进行相应的处理。

switch animal {
case let cat as Cat:print("如果是Cat类型对象,则做相应处理")
case let dog as Dog:print("如果是Dog类型对象,则做相应处理")
default: break
}

2,as!使用场合

向下转型(Downcasting)时使用。由于是强制类型转换,如果转换失败会报 runtime 运行错误。

class Animal {}
class Cat: Animal {}
let animal :Animal  = Cat()
let cat = animal as! Cat

3,as?使用场合

as? 和 as! 操作符的转换规则完全一样。但 as? 如果转换不成功的时候便会返回一个 nil 对象。成功的话返回可选类型值(optional),需要我们拆包使用。
由于 as? 在转换失败的时候也不会出现错误,所以对于如果能确保100%会成功的转换则可使用 as!,否则使用 as?

let animal:Animal = Cat()
if let cat = animal as? Cat{print("cat is not nil")
} else {print("cat is nil")
}

as、as!、as?相关推荐

  1. 使用第三方SDK(如微信、qq、快看、头条等),调用接口405 Method Not Allowed

    使用第三方SDK(如微信.qq.快看.头条等),调用接口405 Method Not Allowed 错误描述:postman请求正常,但客户端调用后接口没有反应,但返回了405错误. 解决方法:第三 ...

  2. 什么是原码、反码、补码?什么是按位与?范围数字按位与!

    前言:学过计算机基础的大家都知道什么是二进制,什么是"与"运算,这里先给大家复习一下. 举一个简单的例子: 5的二进制表示是0101(补齐4位) 7的二进制表示是0111(补齐4位 ...

  3. 大数据中用到的新的数据类型bigint、decimal、smallint、tinyint

    在对比oracle数据库和大数据库的时候,发现了几个用以存放数字的新的类型bigint.decimal.smallint.tinyint,为了对比之间的不同,我进行了统计 bigint 可以精确的表示 ...

  4. 【golang程序包推荐分享】go-ini、viper、godoc

    [golang程序包推荐&分享]go-ini.viper.godoc 一.go-ini 1.程序包简介 2.下载安装 3.简单使用[截取自官网] 二.viper 1.程序包简介 2.下载安装 ...

  5. Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)

    Info 命令返回关于 Redis 服务器的各种信息和统计数值.通过给定可选的参数 section ,可以让命令只返回某一部分的信息. 1. 显示模块 server : 一般 Redis 服务器信息, ...

  6. RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例

    1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...

  7. 常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别

    1. 什么是 KV 存储 KV 是 Key-Value 的缩写,KV 存储也叫键值对存储.简单来说,它是利用 Key 做索引来实现数据的存储.修改.查询和删除功能. 常用的高性能 KV 存储主要有 R ...

  8. 数据结构(03)— 数据处理基本操作(数据的查找、新增、删除、修改)

    我们先来看一个关于查找的例子.查找,就是从复杂的数据结构中,找到满足某个条件的元素.通常可从以下两个方面来对数据进行查找操作:​ 根据元素的位置或索引来查找: 根据元素的数值特征来查找. 针对上述两种 ...

  9. etcd 笔记(06)— Client 结构定义、客户端(初始化、KV存储Get、Put、事务 Txn、压缩 Compact、Watch、Lease

    1. Client 定义 Client 定义如下: type Client struct {ClusterKVLeaseWatcherAuthMaintenance// 认证的用户名Username ...

  10. etcd 笔记(03)— etcd 客户端使用(键值的增、删、改、查)、watch监测键、lease使用(创建租约、撤销租约、刷新租期、查询租期)

    1. etcd 客户端 etcdctl 是一个命令行客户端,便于我们进行服务测试或手动修改数据库内容,etcdctl 在两个不同的 etcd 版本(v2 和 v3)下的功能和使用方式也完全不同. 一般 ...

最新文章

  1. 拼接名字_一个最简单的办法,教你识别原切肉和拼接肉
  2. python3精要(61)-线性回归
  3. windows自带的压缩,解压缩命令
  4. SAP C4C url Mashup的跳转工作原理 - 新的浏览器窗口是如何打开的
  5. gatsby_我如何使用Gatsby和Netlify建立博客
  6. morphological antialiasing
  7. 力扣190.颠倒二进制数
  8. Verilog常用算法-以2为求对数
  9. redis缓存雪崩解决方案六种
  10. Ps如何把背景图片拉长并不变形!
  11. java课题研究方法和技术途径_课题研究的基本方法有哪些?
  12. PyTorch——device与cuda.device用法
  13. android ssl双向验证 X509证书信任管理器类的实现及应用
  14. 环保大数据在环境污染防治管理中的应用
  15. 神兵利器——敏感文件发现工具
  16. Perl笔记:07、以正则表达式进行匹…
  17. 【论文写作】Latex在线创作工具overleaf及账号注册办法
  18. 废水硝酸盐的深度去除
  19. 博弈论(1)例题:纳什均衡 (投票还是不投票/合资问题/n 个企业的古诺模型)博弈论导论 Steven Tadelis - Game Theory. An Introduction
  20. ai 如何导出html格式,Adobe Illustrator导出SVG的设置方法

热门文章

  1. 搭建SGC实现引文网络节点预测(PyTorch+PyG)
  2. Tracert是怎么跟踪路由的?
  3. imx6ull 正点原子设备树适配韦东山的开发板 (一)顺利启动,配置led,button
  4. c语言案例教学法的教学大纲,案例教学法在C语言教学中的应用.doc
  5. 在html5中不支持table的cellpadding 和 cellspacing的替代方案
  6. C#-Log4net 封装log类并自定义log存放路径
  7. 软件设计师——题目以及解析记录(单选)
  8. 超详细缓慢的http拒绝服务攻击验证
  9. 引领网页设计潮流的优秀网页作品赏析《第四季》
  10. 大数据在发电厂的应用_大数据在智能火力发电厂的应用