swift--使用 is 和 as 操作符来实现类型检查和转换 / AnyObject与Any的区别
声明几个类:
//动物类
class Animal{ }
//陆地动物类
class terricole: Animal { }
//海洋动物类
class SeaAnimals: Animal { }
1,is 用来做类型检查
let cat = terricole()
let fish = SeaAnimals()
let arr = [cat,fish] for anima in arr {
if anima is terricole{
print("这是陆地动物")
}else if anima is SeaAnimals{
print("这是海洋动物")
}
}
2, as 用来做类型转换(注:如果不确定类型转换能否成功,可以在 as 后面加问号 “?”)
for animas in arr {
if let c = animas as? terricole{
print("这是陆地动物")
}else if let w = animas as? SeaAnimals{
print("这是海洋动物")
}
}
3,AnyObjective:代表任何class类型的对象实例
let dogs = terricole()
let shark = SeaAnimals()
let arrs:[AnyObject] = [dogs,shark] for animaes in arrs {
if let d = animaes as? terricole{
print("这是个爬行动物")
}else if let e = animaes as? SeaAnimals{
print("这是个水生动物")
}
}
4, Any:范围更广,代表处函数外任何类型的实例
var myAry:[Any] = [Any]()
myAry.append()
myAry.append("hero11223")
myAry.append(terricole())
myAry.append(SeaAnimals())
print("\(myAry)")
for any in myAry {
switch any {
case let any as Int:
print("这是个int类型")
case let any as String:
print("这是个String类型")
case let any as terricole:
print("这是个陆地动物类型")
case let any as SeaAnimals:
print("这是个水生动物类型")
default:
print("这是个未知类型")
}
}
打印如下:
swift--使用 is 和 as 操作符来实现类型检查和转换 / AnyObject与Any的区别的更多相关文章
- Swift 4.0 高级-自定义操作符
在Swift语言中,常见的操作符有+.-.*./.>.<.==.&&.||等等,如果不喜欢,你也可以定义自己喜欢的操作符. 操作符类型 中置运算符(infix operat ...
- 苹果新的编程语言 Swift 语言进阶(十三)--类型检查与类型嵌套
一 类型检查 1. 类型检查操作符 类型检查用来检查或转换一个实例的类型到另外的类型的一种方式. 在Swift中,类型检查使用is和as操作符来实现. is操作符用来检查一个实例是否是某种特定类型,如 ...
- javascript 操作符类型隐性转换
javascript 操作符类型隐性转换 (一).一元操作符只能操作一个值的操作符叫做一元操作符1.递增和递减操作符a. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作 ...
- Swift中的Any 与 AnyObject、AnyClass的区别?
在 Swift 中能够表示 “任意” 这个概念的除了Any .AnyObject以外,还有一个AnyClass. Any.AnyObject.AnyClass有什么区别: AnyObject是一个成员 ...
- [ios][swift]swift中如果做基本类型的转换
在swift中如果做基本类型的转换的?比如Int -> Float(Double)Double -> 保留两位小数String -> IntDouble -> String 有 ...
- 使用instanceof操作符判断对象类型及方法的重载
学习内容: 一.使用instanceof操作符判断对象类型 1.instanceof操作符可以判断一个实例对象是否属于一个类. 语法:对象名 instanceof 类名 2.使用instanceof表 ...
- JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
ECMAScript将对象的属性分为两种:数据属性和访问器属性.每一种属性内部都有一些特性,这里我们只关注对象属性的[[Enumerable]]特征,它表示是否通过 for-in 循环返回属性,也可以 ...
- [ios][swift]Swift类型之间转换
http://www.ruanman.net/swift/learn/4741.html
- Swift中可选类型(Optional)的用法 以及? 和 ! 的区别 (转载博客,知识分享)
本文转载自:代码手工艺人的博客,原文名称:Swift之 ? 和 ! Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之 ...
随机推荐
- LeetCode: Surrounded Regions 解题报告
Surrounded Regions Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A ...
- c++之——重载、重写、重定义
函数重载: 必须在同一个类中进行: 子类无法重载父类的函数,父类同名函数将被子类名称覆盖: 重载是在编译期间根据参数类型和个数决定函数的调用(静态联编). 函数重写与重定义: 重写: 必须发生在基类和 ...
- 解决libstdc++.so.5问题
./bowtie2-buildbowtie2-build: error while loading shared libraries: libtinfo.so.5: cannot open share ...
- System类及其getProterties( )和getProperty( )
System这个类来源: public final class System extends Object System类包含若干个有用的类字段和方法,而且不能被实例化.System类提供的工具包括标 ...
- BusyBox telnet配置
1. busybox配置telnet相关命令. 2. devpts文件系统,是目前最常见的pseudo终端,使用telnetd服务器,必须加载该文件系统. 在/dev目录下创建一个pts目录,用来 ...
- /dev/sdxx is apparently in use by the system; will not make a filesystem here! 解决方法
在存储上共享了一个500G的空间,映射到Linux系统提供上,环境由2个节点组成. 一. 测试一: 直接mount 用fdisk 格式化之后如下: [root@rac1 u01]# fdisk -l ...
- elasticsearch安装与使用(6)-- Logstash安装与配置
由于elasticsearch的search guard 不支持 elasticsearch的jdbc,所以如果安装了search guard认证插件之后,基本上jdbc就废了,所以我们需要用到log ...
- CentOS 下 MySQL 5.7 编译安装
MySQL5.7主要特性: 1—更好的性能:对于多核CPU.固态硬盘.锁有着更好的优化,每秒100W QPS已不再是MySQL的追求,下个版本能否上200W QPS才是吾等用户更关心的 2—更好的In ...
- js学习笔记11----表单操作
1.复选框选中 var aInput = document.getElementsByTagname('input'); aInput[0].checked=true;
- GridView截取某一列字符串的长度
Gridview中,如果你的某一列字符串的长度过长,不做处理的话.那么将显示的奇丑无比, 可以采取设置样式,将其显示为定长,可以在点击查看的时候,在另一个页面对其进行显示 首先在前台设置样式 < ...