import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
checkAndCast()
}
}
func checkAndCast() {
var appleCount = 0
var orangeCount = 0
let apple1 = Apple(placeOfOriginal: "成都")
let apple2 = Apple(placeOfOriginal: "陕西")
let apple3 = Apple(placeOfOriginal: "西安")
let orange1 = Orange(placeOfOriginal: "昆明")
let orange2 = Orange(placeOfOriginal: "台北")
//将其放到同一个篮子里,我们这里用数组表示篮子
//"苹果的原产地是:成都""橙子的原产地是:昆明""苹果的原产地是:陕西""橙子的原产地是:台北""苹果的原产地是:西安"
let basket = [apple1, orange1, apple2, orange2, apple3]
for fruit in basket {
//as? 类型转换 如果不确定是否转换成功就必须使用这个可选类型,这样即便不成功会返回nil,但是如果强制解封失败就会报错
if let apple = fruit as? Apple {
apple.description()
} else if let orange = fruit as? Orange {
orange.description()
}
//这里的is就是类型判断
if fruit is Apple {
appleCount += 1
} else if fruit is Orange {
orangeCount += 1
}
}
debugPrint("一共有\(appleCount)个苹果和\(orangeCount)个橘子")
}
class Fruit {
let placeOfOriginal:String
init(placeOfOriginal: String) {
self.placeOfOriginal = placeOfOriginal
}
}
class Apple: Fruit {
func description() {
debugPrint("苹果的原产地是:\(placeOfOriginal)")
}
}
class Orange: Fruit {
func description() {
debugPrint("橙子的原产地是:\(placeOfOriginal)")
}
}