Swift(十九、类型转换&嵌套类型)
2015-11-12 21:38
323 查看
1、Swift入门学习笔记(第一版),对Swift的基础知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~
2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。
Swift中使用
以下面的实例为例子
创建一个
Output:
如果把
前面已经说了上述例子在迭代时是以MediaItem类迭代的,这里我们向下转型
Output:
注意:转换没有真的改变实例或者它的值。潜在的根本的实例保持不变,只是简单地把它被转换成的类来使用
这个虽然好用,但是代码中还是有明确类型最好
各种类型都OK,包括方法类型和非
嵌套类型的引用点语法即可
2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。
十九、类型转换&嵌套类型
一、类型转换
可以判断实例的类型,也可将实例看做是其父类或者子类的实例Swift中使用
is和
as操作符实现
以下面的实例为例子
class MediaItem { func testPrint() { print("MediaItem") } } class Movie:MediaItem { override func testPrint() { print("Movie") } } class Song:MediaItem { override func testPrint() { print("Song") } }
创建一个
library数组
let library = [Movie(),Song(),Song(),Movie(),Movie()]
library存储的是
Movie和
Song类型,但是若要迭代它,取出的实例为
MediaItem类型。为了让其作为原有类型工作可以检查类型或者向下转换成其他类型
1、检查类型
is检查一个实例是否属于特定类型(子类型),是返回
true,否则返回
false
var movieCount = 0 var songCount = 0 for item in library { if item is Movie { ++movieCount } else if item is Song { ++songCount } } print("Movie:\(movieCount),Song:\(songCount)")
Output:
Movie:3,Song:2
如果把
Movie改成
MediaItem那么结果会是5,0,可见在迭代(
for-in循环)时,是以下一个
MediaItem的形式迭代,然后检查是不是其子类的实例
2、向下转型
有时候常量或变量实际属于一个子类,可以向下转到它的子类型,用as?或
as!
as?:条件形式,返回一个你试图向下转成的类型的可选值。不确定是否能转型成功时用
as!:强制类型,把试图向下转型和强制解包结果作为一个混合动作。确定一定会成功时用,但是转型错误会触发错误
前面已经说了上述例子在迭代时是以MediaItem类迭代的,这里我们向下转型
for item in library { if let movie = item as? Movie { movie.testPrint() } else if let song = item as? Song { song.testPrint() } }
Output:
Movie Song Song Movie Movie
注意:转换没有真的改变实例或者它的值。潜在的根本的实例保持不变,只是简单地把它被转换成的类来使用
3、Any和AnyObject的类型转换
AnyObject:任何
class类型的实例
Any:可表示任何类型,包括方法实例,闭包等
这个虽然好用,但是代码中还是有明确类型最好
var testAny = [Any]() testAny.append(2.18) testAny.append((2.0,2.18)) testAny.append("Hello") testAny.append(Movie()) testAny.append({(name:String)->String in return "Hello \(name)"})
各种类型都OK,包括方法类型和非
class类型,闭包也是可以的等等,上面的
Movie是实例不是
class
二、嵌套类型
类,枚举,结构体之间可以相互嵌套嵌套类型的引用点语法即可
相关文章推荐
- Apple Swift学习教程
- c#入门之类型转换详解
- C#难点逐个击破(9):类型转换
- C++中4种类型转换方式 cast操作详解
- C++中的四种类型转换
- asp 类型转换函数大全第1/2页
- JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
- Javascript 强制类型转换函数
- JavaScript的类型转换(字符转数字 数字转字符)
- Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
- sql使用cast进行数据类型转换示例
- javascript中的关于类型转换的性能优化
- C#调用C++版本dll时的类型转换需要注意的问题小结
- JS 类型转换常见方法小结
- Javascript将string类型转换int类型
- iOS开发之路--微博“更多”页面
- python中的一些类型转换函数小结
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- Swift编程中的泛型解析