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 笔记 (十七) —— 类型转换、嵌套类型](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OVZjMlZ5Y3k5MmFXNWpaVzUwY0dWdVp5OU1hV0p5WVhKNUwwTnZiblJoYVc1bGNuTXZZMjl0TG1WMlpYSnViM1JsTGtWMlpYSnViM1JsTDBSaGRHRXZUR2xpY21GeWVTOUJjSEJzYVdOaGRHbHZiaVV5TUZOMWNIQnZjblF2UlhabGNtNXZkR1V2WVdOamIzVnVkSE12UlhabGNtNXZkR1V0UTJocGJtRXZOamt3TXpNd01qSXZZMjl1ZEdWdWRDOXdNamM0THpWa1pUQTRNVGRtWVdReU1HVmlabUZqT1RneU1tWTROV1F6WXpZNU9UYzJMbXB3WldjPQ%3D%3D.jpg?w=700&webp=1)
实际上。。。也就是教学过程会这么写吧。。。项目中这么写就是脑抽:
![swift 笔记 (十七) —— 类型转换、嵌套类型 swift 笔记 (十七) —— 类型转换、嵌套类型](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OVZjMlZ5Y3k5MmFXNWpaVzUwY0dWdVp5OU1hV0p5WVhKNUwwTnZiblJoYVc1bGNuTXZZMjl0TG1WMlpYSnViM1JsTGtWMlpYSnViM1JsTDBSaGRHRXZUR2xpY21GeWVTOUJjSEJzYVdOaGRHbHZiaVV5TUZOMWNIQnZjblF2UlhabGNtNXZkR1V2WVdOamIzVnVkSE12UlhabGNtNXZkR1V0UTJocGJtRXZOamt3TXpNd01qSXZZMjl1ZEdWdWRDOXdNamM0THpWaE16VTNOemcxT1RNek5UazBZemM0TmpNMVlXUXpOekEzTUdNNU5qVTBMbXB3WldjPQ%3D%3D.jpg?w=700&webp=1)
嵌套类型 这个也没啥好说的,直接上官方例子:
![swift 笔记 (十七) —— 类型转换、嵌套类型 swift 笔记 (十七) —— 类型转换、嵌套类型](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OVZjMlZ5Y3k5MmFXNWpaVzUwY0dWdVp5OU1hV0p5WVhKNUwwTnZiblJoYVc1bGNuTXZZMjl0TG1WMlpYSnViM1JsTGtWMlpYSnViM1JsTDBSaGRHRXZUR2xpY21GeWVTOUJjSEJzYVdOaGRHbHZiaVV5TUZOMWNIQnZjblF2UlhabGNtNXZkR1V2WVdOamIzVnVkSE12UlhabGNtNXZkR1V0UTJocGJtRXZOamt3TXpNd01qSXZZMjl1ZEdWdWRDOXdNamM0THpVNE5XTXhabVJqTXpSbU1HTmtNak15WVRKaE9HRXlPV1ptTmpWa01UbGlMbXB3WldjPQ%3D%3D.jpg?w=700&webp=1)
![swift 笔记 (十七) —— 类型转换、嵌套类型 swift 笔记 (十七) —— 类型转换、嵌套类型](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OVZjMlZ5Y3k5MmFXNWpaVzUwY0dWdVp5OU1hV0p5WVhKNUwwTnZiblJoYVc1bGNuTXZZMjl0TG1WMlpYSnViM1JsTGtWMlpYSnViM1JsTDBSaGRHRXZUR2xpY21GeWVTOUJjSEJzYVdOaGRHbHZiaVV5TUZOMWNIQnZjblF2UlhabGNtNXZkR1V2WVdOamIzVnVkSE12UlhabGNtNXZkR1V0UTJocGJtRXZOamt3TXpNd01qSXZZMjl1ZEdWdWRDOXdNamM0TDJKak5tUTVaakV3TWpSaE1XWmhPR05tT1RobU4yUTVaV015TkdabU5qazFMbXB3WldjPQ%3D%3D.jpg?w=700&webp=1)
使用:
![swift 笔记 (十七) —— 类型转换、嵌套类型 swift 笔记 (十七) —— 类型转换、嵌套类型](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OVZjMlZ5Y3k5MmFXNWpaVzUwY0dWdVp5OU1hV0p5WVhKNUwwTnZiblJoYVc1bGNuTXZZMjl0TG1WMlpYSnViM1JsTGtWMlpYSnViM1JsTDBSaGRHRXZUR2xpY21GeWVTOUJjSEJzYVdOaGRHbHZiaVV5TUZOMWNIQnZjblF2UlhabGNtNXZkR1V2WVdOamIzVnVkSE12UlhabGNtNXZkR1V0UTJocGJtRXZOamt3TXpNd01qSXZZMjl1ZEdWdWRDOXdNamM0TDJFMk5XUTBNbVJoTldZeFlqZzVZalEyWXpOaFpqaGpNR1F6TlRZNFpqbGtMbXB3WldjPQ%3D%3D.jpg?w=700&webp=1)