Swift 类型检查与类型转换
前言
- 在 Swift 语言中一般使用
is关键字实现类型检查,使用as关键字实现类型转换,除此之外还可以通过构造器和方法来实现类型转换。
1、类型检查
1.1 使用 is 检查
类型检查操作符
is可以用来检查一个实例是否属于特定子类型,若属于那个类型,则类型检查操作符返回true, 否则返回false。class Transport { var scope = "" init(scope: String) {
self.scope = scope
}
} class Car: Transport { var type = "daba" init(scope: String, type: String) {
super.init(scope: scope)
self.type = type
}
} class Airplance: Transport { var company = "dongfanghangkong" init(scope: String, company: String) {
super.init(scope: scope)
self.company = company
}
} var carNum = 0
var airNum = 0 let journey = [
Car(scope: "ludi", type: "daba"),
Car(scope: "ludi", type: "gongjiaoche"),
Airplance(scope: "hangkong", company: "dongfanghangkong"),
Car(scope: "ludi", type: "chuzuche")
]
for tra in journey { if tra is Car { // 检查是否属于 Car 类型
carNum += 1
} else if tra is Airplance { // 检查是否属于 Airplance 类型
airNum += 1
}
} print(carNum) // 3
print(airNum) // 1
1.2 使用 as? 检查
安全转型
as?,用于不确定是否可以转型成功的情况,如果转型成功则执行转型,如果转型行不通,就会返回nil,这时可以使用as?做类型检查。for tra in journey { if let _ = tra as? Car { // 检查是否属于 Car 类型
carNum += 1
} else if let _ = tra as? Airplance { // 检查是否属于 Airplance 类型
airNum += 1
}
} print(carNum) // 3
print(airNum) // 1
2、类型转换
2.1 使用 as 转换
有时候我们需要的某个类型的实例可能实际上是该类型的一个子类,可以使用关键字
as尝试对它使用向下转型得到它的子类。向下转型分为两种。
- 安全转型
as?,用于不确定是否可以转型成功的情况,如果转型成功则执行转型,如果转型行不通,就会返回nil,这时可以使用as?做类型检查。 - 强制转型
as!,只用在确定向下转型一定能够成功的情况下,当试图将实例向下转为一个不正确的类型时,会抛出异常。
- 安全转型
与
is关键字相比,使用as除了可以检查类型外,还可以访问子类的属性或者方法。通常为了使用转型成功的实例,搭配使用可选绑定。for tra in journey { if let car = tra as? Car { // 转换成 Car 类型
print(car.type)
} else if let airplane = tra as? Airplance { // 转换成 Airplance 类型
print(airplane.company)
}
}
2.2 使用 “构造器的方法” 转换
使用类型的构造器转换
let d: Double = 12.3
let i = Int(d) // 12
Swift 类型检查与类型转换的更多相关文章
- Swift类型检查与转换
继承会发生在子类和父类中,如图所示,是一系列类的继承关系类图,Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类.这个继承关系类图的具体实现 ...
- Swift—类型检查与转换-备
继承会发生在子类和父类之间,是一系列类的继承关系. 例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类. 这个继承关系类的具体实现代码 ...
- Swift - 类型判断is 与 类型转换as
在Swift中,通常使用is和as操作符来实现类型检查和转换.下面通过样例来演示使用方法,首先定义几个类. 1 2 3 4 5 6 7 8 9 10 11 //基类,人类 class Human{ } ...
- 《从零开始学Swift》学习笔记(Day48)——类型检查与转换
原创文章,欢迎转载.转载请注明:关东升的博客 继承会发生在子类和父类之间,是一系列类的继承关系. 例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Pers ...
- 《从零開始学Swift》学习笔记(Day48)——类型检查与转换
原创文章,欢迎转载.转载请注明:关东升的博客 继承会发生在子类和父类之间,是一系列类的继承关系. 比如:Person是类层次结构中的根类.Student是Person的直接子类.Worker是Pers ...
- 苹果新的编程语言 Swift 语言进阶(十三)--类型检查与类型嵌套
一 类型检查 1. 类型检查操作符 类型检查用来检查或转换一个实例的类型到另外的类型的一种方式. 在Swift中,类型检查使用is和as操作符来实现. is操作符用来检查一个实例是否是某种特定类型,如 ...
- swift 类型.
swift 类型 变量声明 用let来声明常量,用var来声明变量 可以在一行中声明多个常量或者多个变量,用逗号隔开 var x = 0.0, y = 0.0, z = 0.0 类型安全 Swift ...
- 编译器开发系列--Ocelot语言6.静态类型检查
关于"静态类型检查",想必使用C 或Java 的各位应该非常熟悉了.在此过程中将检查表达式的类型,发现类型不正确的操作时就会报错.例如结构体之间无法用+ 进行加法运算,指针和数值之 ...
- Java中静态类型检查是如何进行的
以下内容来自维基百科,关于静态类型检查和动态类型检查的解释: 静态类型检查:基于程序的源代码来验证类型安全的过程: 动态类型检查:在程序运行期间验证类型安全的过程: Java使用静态类型检查在编译期间 ...
随机推荐
- servlet种下cookie后如何携带cookie继续往下走
事情是这样的,今天我在应用1里面手动种下了一个cookie,然后它会发接着访问应用2,因为是我手动setCookie,所以它还没来得及携带cookie继续前往下一站,于是,apple pen,炸了. ...
- ASP入门(十六)-ASP开发的规范
毋容置疑,在开发中遵守一套规范,将会有利于提高代码的可读性,较低后期维护成本. 文件存放目录规范 js 目录下存放着页面所使用的 JavaScript 脚本文件,因为我们可能用到第三方提供的免费的 J ...
- javax.validation.UnexpectedTypeException: No validator could be found for constraint 'org.hibernate.validator.constraints.Length' validating type
使用hibernate validator出现上面的错误, 需要注意: @NotNull 和 @NotEmpty 和@NotBlank 区别 @NotEmpty 用在集合类上面@NotBlank 用 ...
- asp.net集合类
1.返回IEnumerable类型 protected void Page_Load(object sender, EventArgs e) { IEnumerable ie = AllGet(); ...
- TaskFactory设置并发量
Task对象很多人知道了(使用Task代替ThreadPool和Thread, C#线程篇—Task(任务)和线程池不得不说的秘密(5)) 相对的还有TaskScheduler 这个调度器,可以自定义 ...
- Java和Javac的使用时总提示找不到类模块的解决方案
1.场景: 争对网上的很多文章中javac编译与java运行的文章,有很多不明确的地方,使得在合适时发现很多坑.这里给大家作下简介. 2.Javac的使用注意: javac -d ./ ./Insta ...
- Communication API
Stingray WIKI Stingray javascript Communication 主要的三个方法: Communication.LinkRequest - 页面跳转,调用比较简单,直接参 ...
- python获取系统开机时间
import psutil import time time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(psutil.boot_time()))
- Knockout学习之监控属性
监控属性 Knockout包含以下三个核心特性: 1.监控属性和依赖跟踪 2.显式绑定 3.模板 下面我们将学习这三点中的第一点,在这之前我们先研究下MVVM模式和视图模型的概念. MVVM和视图模型 ...
- Generating phar.phar chmod: cannot access `ext/phar/phar.phar': No such file or directory make: [ext/phar/phar.phar] Error 1 (ignored)
make install出现了cp: cannot stat `ext/phar/phar.phar': No such file or directory 于是我又: cd ext/phar/ls ...