类型转换
这其实是多态。。。
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类型的就直接上官方例子了,没啥可说的:
实际上。。。也就是教学过程会这么写吧。。。项目中这么写就是脑抽:
嵌套类型
这个也没啥好说的,直接上官方例子:
使用:
相关文章
- 【Java Web 学习笔记】Javascript_01_变量,数据类型,类型转换
- java学习笔记(六)----对象的类型转换, 匿名内置类
- 网络传输中利用fastjson将复杂嵌套数据类型Json格式转换(GeoJsonPolygon)
- 具有约束关联类型错误的Swift协议“类型不可转换”
- Swift SpriteKit:线程1:信号SIGABRT。无法转换SKLabelNode类型的值?
- 当我将一个字节数组从Swift转换为Objective-C时应该使用什么数据类型
- Swift—类型检查与转换-备
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
- Core Java 学习笔记——2.基本数据类型&类型转换
- 《从零开始学Swift》学习笔记(Day 13)——数据类型之整型和浮点型