详解Swift中的数据类型类型转换

 更新时间:2016年07月07日 18:44:48   作者:珲少  
Swift中的类型转换可以结合类的继承等面向对象的编程特性来进行,本文中我们就来详解Swift中的数据类型类型转换,需要的朋友可以参考下

一、类型检查与转换

在Objective-C和Java中,任何类型实例都可以通过强转使编译器认为它是另一种类型的实例,这么做其实是将所有的安全检查工作都交给了开发者自己来做。先比之下,Swift中的Optional类型转换就会比较安全与可靠。

Swift中使用is关键字来进行类型的检查,其会返回一个布尔值true或者false来表明检查是否成立,示例如下:

var str = "HS"
if str is String {
  print(str)
}

Swift中有向上兼容与向下转换的特性,就是说,一个父类类型的集合可以接收子类的实例,同样,在使用这些实例变量时可以将其向下转换为子类类型,示例如下:

//自定义一个类及其子类
class MyClass {
  var name:String?
}

class MySubClassOne: MyClass {
  var count:Int?
}
class MySubClassTwo: MyClass {
  var isBiger:Bool?
}
//创建3个实例
var obj1 = MyClass()
obj1.name = "HS"
var obj2 = MySubClassOne()
obj2.count = 100
var obj3 = MySubClassTwo()
obj3.isBiger=true
//将实例存放在其公共父类类型的数组集合中
var array:[MyClass] = [obj1,obj2,obj3]
//进行遍历
for var i in 0..<array.count {
  var obj = array[i]
  if obj is MySubClassOne {
    print((obj as! MySubClassOne).count!)
    continue
  }
  if obj is MySubClassTwo {
    print((obj as! MySubClassTwo).isBiger!)
    continue
  }
  if obj is MyClass {
    print(obj.name!)
  }
}

有一点需要注意,在进行类型转换时,可以使用as!或者as?来进行,as!是一种强制转换方法,它在开发者确定类型无误是使用,如果用as!转换的类型有误,则会出现运行时错误。as?是Optional类型转换,如果转换失败,则会返回nil。

二、Any和AnyObject类型

在Objective-C中,常常使用id来表示引用类型的泛型,Swift中的AnyObject与之类似。示例如下:

//进行遍历
for var i in 0..<array.count {
  var obj = array[i]
  if obj is MySubClassOne {
    print((obj as! MySubClassOne).count!)
    continue
  }
  if obj is MySubClassTwo {
    print((obj as! MySubClassTwo).isBiger!)
    continue
  }
  if obj is MyClass {
    print((obj as! MyClass).name!)
  }
}

Any类型则比AnyOject类型更加强大,其可以混合值类型和引用类型一起工作,示例如下:

var anyArray:[Any] = [100,"HS",obj1,obj2,false,(1.1),obj3,{()->() in print("Closures")}]

上面示例的数组中包含了整型,字符串类型,引用类型,布尔类型和闭包。

相关文章

  • swift实现自动轮播图效果(UIScrollView+UIPageControl+Timer)

    swift实现自动轮播图效果(UIScrollView+UIPageControl+Timer)

    这篇文章主要为大家详细介绍了swift实现自动轮播图效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 因为一个Crash引发对Swift构造器的思考分析

    因为一个Crash引发对Swift构造器的思考分析

    这篇文章主要给大家介绍了关于因为一个Crash引发对Swift构造器的思考分析,文中通过示例代码介绍的非常详细,对大家的学习或者使用Swift具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • swift 3.0中realm封装类示例代码

    swift 3.0中realm封装类示例代码

    这篇文章主要给大家介绍了关于swift 3.0中realm封装类的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用swift具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • swift中可选值?和!使用的方法示例

    swift中可选值?和!使用的方法示例

    这篇文章主要给大家介绍了关于swift中可选值?和!使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • Swift教程之闭包详解

    Swift教程之闭包详解

    这篇文章主要介绍了Swift教程之闭包详解,闭包可以在上下文的范围内捕获、存储任何被定义的常量和变量引用,因这些常量和变量的封闭性,而命名为“闭包(Closures)”,需要的朋友可以参考下
    2015-01-01
  • swift4更新中所遇到的一些问题总结

    swift4更新中所遇到的一些问题总结

    这篇文章主要给大家介绍了关于在swift4更新中所遇到的一些问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • Swift中的Access Control权限控制介绍

    Swift中的Access Control权限控制介绍

    这篇文章主要介绍了Swift中的Access Control权限控制介绍,本文讲解了private、internal、public三个关键字的使用,需要的朋友可以参考下
    2015-05-05
  • iOS中Swift指触即开集成Touch ID指纹识别功能的方法

    iOS中Swift指触即开集成Touch ID指纹识别功能的方法

    随着移动支付时代的到来,Touch ID 指纹验证迅速被支付宝,微信钱包普及,相信各位朋友使用后也大呼方便。下面给大家分享iOS中Swift指触即开集成Touch ID指纹识别功能的方法,一起看看吧
    2017-03-03
  • 初探Swift3.0带来的变化汇总

    初探Swift3.0带来的变化汇总

    这个周末抽空看了下swift3.0的变化,今天小编通过本教程给大家分享Swift3.0带来的变化,非常不错,感兴趣的朋友参考下吧
    2016-12-12
  • Swift 4.0中如何引用3.0的第三方库

    Swift 4.0中如何引用3.0的第三方库

    这篇文章主要给大家介绍了关于在Swift 4.0中如何引用3.0第三方库的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01

最新评论