swift:类型转换(is用作判断检测、as用作类型向下转换)



- class MediaItem {
- var name: String
- init(name: String) {
- self.name = name
- }
- }
- class Movie: MediaItem {
- var director: String
- init(name: String, director: String) {
- self.director = director
- super.init(name: name)
- }
- }
- class Song: MediaItem {
- var artist: String
- init(name: String, artist: String) {
- self.artist = artist
- super.init(name: name)
- }
- }
- let library = [
- Movie(name: "Casablanca", director: "Michael Curtiz"),
- Song(name: "Blue Suede Shoes", artist: "Elvis Presley"),
- Movie(name: "Citizen Kane", director: "Orson Welles"),
- Song(name: "The One And Only", artist: "Chesney Hawkes"),
- Song(name: "Never Gonna Give You Up", artist: "Rick Astley")
- ]
- // the type of "library" is inferred to be MediaItem[]
- var movieCount = 0
- var songCount = 0
- for item in library {
- if item is Movie {
- ++movieCount
- } else if item is Song {
- ++songCount
- }
- }
- println("Media library contains \(movieCount) movies and \(songCount) songs")
- // prints "Media library contains 2 movies and 3 songs"
- for item in library {
- if let movie = item as? Movie {
- println("Movie: '\(movie.name)', dir. \(movie.director)")
- } else if let song = item as? Song {
- println("Song: '\(song.name)', by \(song.artist)")
- }
- }
- // Movie: 'Casablanca', dir. Michael Curtiz
- // Song: 'Blue Suede Shoes', by Elvis Presley
- // Movie: 'Citizen Kane', dir. Orson Welles
- // Song: 'The One And Only', by Chesney Hawkes
- // Song: 'Never Gonna Give You Up', by Rick Astley
- let someObjects: [AnyObject] = [
- Movie(name: "2001: A Space Odyssey", director: "Stanley Kubrick"),
- Movie(name: "Moon", director: "Duncan Jones"),
- Movie(name: "Alien", director: "Ridley Scott")
- ]
- for object in someObjects {
- let movie = object as Movie
- println("Movie: '\(movie.name)', dir. \(movie.director)")
- }
- // Movie: '2001: A Space Odyssey', dir. Stanley Kubrick
- // Movie: 'Moon', dir. Duncan Jones
- // Movie: 'Alien', dir. Ridley Scott
- for movie in someObjects as [Movie] {
- println("Movie: '\(movie.name)', dir. \(movie.director)")
- }
- // Movie: '2001: A Space Odyssey', dir. Stanley Kubrick
- // Movie: 'Moon', dir. Duncan Jones
- // Movie: 'Alien', dir. Ridley Scott
- var things = [Any]()
- things.append(0)
- things.append(0.0)
- things.append(42)
- things.append(3.14159)
- things.append("hello")
- things.append((3.0, 5.0))
- things.append(Movie(name: "Ghostbusters", director: "Ivan Reitman"))
- for thing in things {
- switch thing {
- case 0 as Int:
- println("zero as an Int")
- case 0 as Double:
- println("zero as a Double")
- case let someInt as Int:
- println("an integer value of \(someInt)")
- case let someDouble as Double where someDouble > 0:
- println("a positive double value of \(someDouble)")
- case is Double:
- println("some other double value that I don't want to print")
- case let someString as String:
- println("a string value of \"\(someString)\"")
- case let (x, y) as (Double, Double):
- println("an (x, y) point at \(x), \(y)")
- case let movie as Movie:
- println("a movie called '\(movie.name)', dir. \(movie.director)")
- default:
- println("something else")
- }
- }
- // zero as an Int
- // zero as a Double
- // an integer value of 42
- // a positive double value of 3.14159
- // a string value of "hello"
- // an (x, y) point at 3.0, 5.0
- // a movie called 'Ghostbusters', dir. Ivan Reitman。
swift:类型转换(is用作判断检测、as用作类型向下转换)的更多相关文章
- Swift - 类型转换(as as! as?)
swift 类型转换 一,as 1,as使用场合 (1)从派生类转换为基类,向上转型(upcasts) class Animal {} class Cat: Animal {} let cat = C ...
- Swift类型转换
关于「类型转换」(Type Casting),<The Swift Programming Language>描述如下: Type casting is a way to check th ...
- 判断是否联网_检测网络的类型为3G、2G、wap、wifi
判断是否联网_检测网络的类型为3G.2G.wap.wifi 判断是否联网: /*** * judge Internet is available * * @author wei-spring * @ ...
- Swift类型转换 和 类型别名的定义(typealias)
(一)类型转换 类型转化在 Swift 中是比较严格的,不同类型之间可以认为是不能相互转化的,只能重新产生一个对象和值,并拷贝一份. 1.0 整型数值之间的转换. // 不同类型是不能直接相加的,这时 ...
- php判断检测一个数组里有没有重复的值
php判断检测一个数组里有没有重复的值 php里有一个处理数组重复值得函数array_unique,我们的思路就是用这个函数来实现的. if (count($array) != count(array ...
- swift类型转换之Could not cast value of type xxx to xxx错误的一种特殊情况记录
之前swift项目打包成Framework静态库,提供给OC项目套入使用时,有时会抱这样一个错误: 这个错误发生的概率比较随机,有时会,有时不会,而且这句话在swift中的使用,是做model类型强制 ...
- jQuery 判断是否为数字的方法 及 转换数字函数
<script language="javascript"> var t=$("#id").val();//这个就是我们要判断的值了 if(!isN ...
- Swift类型检查与转换
继承会发生在子类和父类中,如图所示,是一系列类的继承关系类图,Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类.这个继承关系类图的具体实现 ...
- Swift—类型检查与转换-备
继承会发生在子类和父类之间,是一系列类的继承关系. 例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类. 这个继承关系类的具体实现代码 ...
随机推荐
- 使用Qpython3制作老版天翼飞TP路由器拨号脚本
#幻境拨号python版 #by 1414641776 account='xxxxxx@96301' password='xxxxx' # 路由器脚本 def sendToRoute(account, ...
- 9、XAML名称空间详解
XAML命名空间 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ...
- Thinkphp模板中使用自定义函数的方法
注意:自定义函数要放在项目应用目录/common/common.php中. 这里是关键. 模板变量的函数调用格式:{$varname|function1|function2=arg1,arg2,### ...
- c# 取 list前100条数据
[问] List<KeyWord> sortedList = (from a in keyWordList orderby a.Total descending select a).ToL ...
- 3144:[HNOI2013]切糕 - BZOJ
题目描述 Description 经过千辛万苦小 A 得到了一块切糕,切糕的形状是长方体,小 A 打算拦腰将切糕切成两半分给小 B.出于美观考虑,小 A 希望切面能尽量光滑且和谐.于是她找到你,希望你 ...
- ViewController 优化
解决问题:部分复杂页面的Controller过于庞大,不利于维护与复用: 复杂的页面大多是基于tableview的页面.复杂页面的代码大致可分为两部分(复杂的View布局用Nib实现的话,一般大家都是 ...
- Java多线程——<五>后台线程(daemon)
一.后台线程(守护线程) 学一个东西,最重要的一点就是,为什么要用它? 后台线程区别于普通线程,普通线程又可以称为用户线程,只完成用户自己想要完成的任务,不提供公共服务.而有时,我们希望编写一段程序, ...
- AngularJS 基础
1. AngularJs 是一个JS 框架,是一种基于MVC的设计模式 2. script 需引用 <script src="angular.min.js">,安装包 ...
- [原] GLES在iOS和Android上的不同
本来GLES提供了与native platform的接口 EGL, 然而iOS没有使用EGL接口, 而是自己搞了一套,叫做EAGL的类似东西, 虽然说大同小异,但是在做跨平台的时候还是很恶心. elg ...
- struct2访问或添加request/session/application
访问或添加request/session/application 1 通过ActionContext //这样放置 public String execute() { ActionConte ...