Swift3.0 - 类型转换

前端之家收集整理的这篇文章主要介绍了Swift3.0 - 类型转换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Swift3.0 - Type Casting 类型转换

http://blog.csdn.net/brycegao321/article/details/53311964

https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-ID338


类型转换包括判断对象的基类和将基类引用转换为派生类引用。 Swift使用is判断当前对象是否为某个类的对象, 作用同Java的instanceof关键字; Swift使用as作为强转操作符, 将基类引用转换为派生类引用。

基类:

[java] view plain copy
  1. classMediaItem{
  2. varname:String
  3. init(name:String){
  4. self.name=name
  5. }
  6. }
2个MediaItem的派生类(注意:在Swift中先初始化派生类的成员变量,然后再执行父类的构造函数):

copy

classMovie:MediaItem{
  • vardirector:String
  • init(name:String,director:String){
  • self.director=director
  • super.init(name:name)
  • }
  • classSong:MediaItem{
  • varartist:String
  • self.artist=artist
  • }

  • 声明一个数组,包含基类和派生类的对象, 那么该数组的数据类型是 基类

    copy

    letlibrary=[
  • Movie(name:"Casablanca",director:"MichaelCurtiz"),
  • Song(name:"BlueSuedeShoes",artist:"ElvisPresley"),
  • Movie(name:"CitizenKane",director:"OrsonWelles"),108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> Song(name:"TheOneAndOnly",artist:"ChesneyHawkes"),248)"> Song(name:"NeverGonnaGiveYouUp",artist:"RickAstley")
  • ]
  • copy

    iflibraryis[MediaItem]{
  • print("library'stypeis[MediaItem]")
  • }
  • 输出: library's type is [MediaItem]

    说明: library数组相当于[MediaItem]类型的数组。


    上面提到了is关键字的用法, 跟Java的instanceof完全一样。 请注意is关键字不仅在判断当前类返回true,所有的父类也同样返回true。参看示例代码

    things是可以插入所有数据类型的数组。

    Swift还提供关键字as,作用类似于is,即判断数据类型。示例代码:

    copy

    forthinginthings{
  • switchthing{
  • case0asInt://可理解成“作为整型的数值0”
  • print("zeroasanInt")
  • 0asDouble://“作为浮点型的数值0”
  • print("zeroasaDouble")
  • caseletsomeIntasInt:
  • print("anintegervalueof\(someInt)")
  • default:
  • print("somethingelse")
  • 输出:
  • //zeroasaDouble
  • //anintegervalueof42

  • 类似于捕获崩溃的try、try?和try!, 类型转换操作符是as、as?和as!;二者逻辑是一样的,问号表示可选数据类型,感叹号表示强制执行。

    小结:

    1、Swift使用is判断属于某个类, 作用同Java的instanceof;

    2、Swift使用Any表示所有数据类型、AnyObject表示所有类对象类型;类似于Java的Oject和OC的NSObject。

    3、使用as?和as!做数据类型强转,as用于判断是否某个数据类型。

    4、as和is关键字的作用有点像,但不能相互替代。 is可用于if判断条件中, as可理解为“作为**数据类型”并且多用于switch/case中。

    猜你在找的Swift相关文章