对照Java学习Swift--类型转换(Type Casting)
来源:互联网 发布:整型数据的表示范围 编辑:程序博客网 时间:2024/05/22 05:01
类型转换在Java和Swift中非常的相似,这个一般都是在类中, 可以判断实例的类型,也可以将实例看做是其父类或者子类的实例。也可以用它来检查一个类型是否实现了某个协议,协议相当于Java中的接口。
检查类型(Checking Type)
用类型检查操作符(is)来检查一个实例是否属于特定子类型。若实例属于那个子类型,类型检查操作符返回 true,否则返回 false。Java中使用instanceof关键字来类型检查。
swift:
if item is Movie { ++movieCount } else if item is Song { ++songCount }
Java:
if(item instanceof Movie) { ++movieCount } else if(item instanceof Song) { ++songCount }
向下转型(Downcasting)
某类型的一个常量或变量可能在幕后实际上属于一个子类。当确定是这种情况时,你可以尝试向下转到它的子类型,用类型转换操作符(as? 或 as!)。
因为向下转型可能会失败,类型转型操作符带有两种不同形式。条件形式(conditional form)as? 返回一个你试图向下转成的类型的可选值(optional value)。强制形式 as! 把试图向下转型和强制解包(force-unwraps)转换结果结合为一个操作。
当你不确定向下转型可以成功时,用类型转换的条件形式(as?)。条件形式的类型转换总是返回一个可选值(optional value),并且若下转是不可能的,可选值将是 nil。这使你能够检查向下转型是否成功。
只有你可以确定向下转型一定会成功时,才使用强制形式(as!)。当你试图向下转型为一个不正确的类型时,强制形式的类型转换会触发一个运行时错误。
swift:
if let movie = item as? Movie { print("Movie: '\(movie.name)', dir. \(movie.director)") } else if let song = item as? Song { print("Song: '\(song.name)', by \(song.artist)") }
Java:
Movie movie = ((Movie)item)
很像吧。
Any 和 AnyObject 的类型转换
Swift 为不确定类型提供了两种特殊的类型别名:
- AnyObject 可以表示任何类类型的实例。
- Any 可以表示任何类型,包括函数类型。
Java中所有类都是Object类的子类,所以Object可以表示任何类型的实例,包括函数类型,不区分类类型和其他类型。
这个很简单,不必多说。
- 对照Java学习Swift--类型转换(Type Casting)
- Swift 类型转换(Type Casting)
- Swift-类型转换(Type Casting)(十七)
- Swift学习笔记18——嵌套类型(Nested Types)和类型转换(Type Casting)
- Swift类型选择(Type Casting)
- C++类型转换(Type Casting)
- C++—类型转换(Type Casting)
- C++类型转换(Type Casting)
- C++的类型转换(Type Casting)
- C++类型转换(Type Casting)
- C++--类型转换(Type Casting)
- java3:类型转换(type casting)
- 类型转换二:Type casting
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- 深入理解C++类型转换(Type Casting)
- Android常用颜色值
- Python RabbitMQ.Redis,Memcache
- ios url 编码和解码
- 如何测试网页的登录页面
- javafx的创建过程中产生的问题
- 对照Java学习Swift--类型转换(Type Casting)
- 大数据时代:企业该如何搭建自己的BI(商业智能)系统?
- MongoDB使用小结:一些不常见的经验分享
- 几种PHP获取POST数据技巧
- 8.15Scp命令
- Xcode发布应用后重新运行项目出现A valid provisioning profile for this executable was not found.
- iOS CoreLocation框架第三章—— CLGeocoder(地理编码器)和CLPlacemark(获取位置信息)
- hge循环播放两张图片
- 60. Permutation Sequence