swift 笔记 (十七) —— 类型转换、嵌套类型

时间:2022-07-05 15:40:11
类型转换 这其实是多态。。。 swift提供了 is 和 as 两个操作符,用以检测值的类型或者转换它的类型。
class MyBasic {      var name:String
     init (name:String) {           self.name = name      } }
class MyFriend: MyBasic {      var level = 9 }
class MySelf: MyBasic {      var height = 9 }
var myArray = [      MyFriend(name: ”Hello”),      MySelf(name: ”Kitty") ]
for elem in myArray {      if elem is MyFriend {                         //判断elem是否是 MyFriend类型           let obj = elem as MyFriend          //将obj视为elem向下转型为MyFriend           println(“name: \(obj.name) level:\(obj.level)")           continue         } 
     if elem is MySelf {           let obj = elem as MySelf           println(“name: \(obj.name) height:\(obj.height)")           continue      } }
上面这段,是判断了类型之后转型,但是有些时候,我们需要把判断和转型放在一条语句中执行:
let obj = myArray[0] as? MySelf     //obj变成了可选型,转型不成功为nil 这时,obj为nil,因为myArray第一个元素不是MySelf类型。
Any 和 AnyObject 的类型转换 swift 提供了两个可以代表不确定类型的特殊类型: AnyObject可以代表任何类的实例 Any可以代表任何类型(类型,不是实例),除了函数。
cocoa的一些api,会返回一个AnyObject类型的数组:AnyObject[] 因为Objective C中没有明确的类型的数组。
现在,将上面的myArray改一下定义: var myArray:AnyObject[] = [          //将数组定义为AnyObject类型     MyFriend(name: ”Hello”),     MyFriend(name: ”Kitty")]
现在就可以这样写for了:for elem in myArray as MyFriend[] {          //将数组myArray看作是 MyFriend类型的数组     println(“name \(elem.name) level:\(elem.level)")}
Any类型的就直接上官方例子了,没啥可说的: swift 笔记 (十七) —— 类型转换、嵌套类型
swift 笔记 (十七) —— 类型转换、嵌套类型

实际上。。。也就是教学过程会这么写吧。。。项目中这么写就是脑抽: swift 笔记 (十七) —— 类型转换、嵌套类型
swift 笔记 (十七) —— 类型转换、嵌套类型
嵌套类型 这个也没啥好说的,直接上官方例子: swift 笔记 (十七) —— 类型转换、嵌套类型
swift 笔记 (十七) —— 类型转换、嵌套类型
swift 笔记 (十七) —— 类型转换、嵌套类型
swift 笔记 (十七) —— 类型转换、嵌套类型

使用: swift 笔记 (十七) —— 类型转换、嵌套类型
swift 笔记 (十七) —— 类型转换、嵌套类型