Swift类型选择(Type Casting)

在Swift开发过程中,我们会遇到以下情况:判断某个实例是那个类生成的;将子类转换为父类;想让一个变量可以为任何类型(值对象、引用对象、方法)。。。

Swift也能处理这些情况,需要使用的关键字:类型判断is、类型转换as、属性声明AnyObject和Any。

在介绍这四个关键字的使用前,先构建类MediaItem、Movie和Song。

class MediaItem {

}

class Movie: MediaItem {

}

class Song: MediaItem {

}

其中Movie和Song都继承MediaItem。

Is

is主要用于类型判断,如我们判断某个实例是那个类的子类,或是那个类生成的。

let array = [Song(),Movie()]

// is测试,类型判断
for item in array {
    if item is Movie {
        print("Movie构建")
    } else if item is Song {
        print("Song构建")
    }
}

As

as主要用于类型转换,可将一个类转换为另一个类。as后可以跟’?’或’!’。

  • as?:预转换,转换失败时,返回nil。
  • as!:强转换,转换失败时,程序崩溃。
for item in array {
    if let movie = item as? Movie {
        print("可转换为Movie: '\(movie)'")
    } else if let song = item as? Song {
        print("可转换为Song: '\(song)'")
    }
    // 强转换,失败时,程序崩溃
    let movie = item as! Movie
}

AnyObject

使用AnyObject声明的常量(变量)可以是值对象或引用对象。

let someObjects: [AnyObject] = [Movie(),1,"33"]

Any

Any和AnyObject具有相同的特性,只是Any还可以代表方法和闭包。

var things = [Any]()
things.append(0) // 值类型
things.append(Movie()) // 引用类型
things.append({ (name: String) -> String in "Hello,\(name)" }) // 闭包

其他

参考资料

The Swift Programming Language (Swift 2.1)

文档修改记录

时间 描述
2015-11-1 根据 The Swift Programming Language (Swift 2.1)中的Type Casting总结

版权所有:http://blog.csdn.net/y550918116j

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...