enum IntOrString {
case IntValue(Int)
case StringValue(String)
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//Swift中我们在一个集合中只能放同一个类型的元素,
//enum可以带有值的特点,将类型信息封装到特定的enum中
let mixed = [IntOrString.IntValue(1), IntOrString.StringValue("two"),IntOrString.IntValue(3)]
for value in mixed {
switch value {
case let .IntValue(i): print(i * 2)
case let .StringValue(s): print(s.capitalized)
}
}
}
}
补充说明:
- Swift中我们在一个集合中只能放同一个类型的元素。
- 如果我们要把不同类型放到同一个容器类型中的话,一个比较容易想到的是使用Any或者AnyObject,或者是使用NSArray
import UIKit
let mixed: [Any] = [1, “two”, 3]
//如果不指明类型,由于UIKit的存在将被推断为[NSObject]
let objectArray = [1, “two”, 3]
- 其实我们注意到,Any其实是protocol,而不是具体的某个类型。因此就是说其实在容器类型泛型的帮助下,我们不仅可以在容器中添加同一具体类型的对象,也可以添加实现了同一接口的类型对象。
网友评论