class MediaItem {
var name: String
init(name: String) {
self.name = name
}
}
class Movie: MediaItem {
var director: String
init(director: String, name:String) {
self.director = director
super.init(name: name)
}
}
class Song: MediaItem {
var artist: String
init(artist: String, name: String) {
self.artist = artist
super.init(name: name)
}
}
//library被推断出来存储的类型是MediaItem类型,因此遍历时候取出来的每个item类型默认都是MediaItem类型
let library = [
Movie(director: "1", name: "1"),
Song(artist: "2", name: "2"),
Song(artist: "3", name: "3"),
Movie(director: "4", name: "4"),
Song(artist: "5", name: "5"),
]
var movieCount = 0, songCount = 0
for item in library {
//item是MediaItem类型
if item is Movie {
movieCount += 1
}else if item is Song{
songCount += 1
}
}
print("moveCount = \(movieCount) songCount = \(songCount)")
复制代码
class MediaItem {
var name: String
init(name: String) {
self.name = name
}
}
class Movie: MediaItem {
var director: String
init(director: String, name:String) {
self.director = director
super.init(name: name)
}
}
class Song: MediaItem {
var artist: String
init(artist: String, name: String) {
self.artist = artist
super.init(name: name)
}
}
//library被推断出来存储的类型是MediaItem类型,因此遍历时候取出来的每个item类型默认都是MediaItem类型
let library = [
Movie(director: "1", name: "1"),
Song(artist: "2", name: "2"),
Song(artist: "3", name: "3"),
Movie(director: "4", name: "4"),
Song(artist: "5", name: "5"),
]
var movieCount = 0
var songCount = 0
for item in library {
//item默认是MediaItem类型
if let _ = item as? Movie{
movieCount += 1
} else if let _ = item as? Song{
songCount += 1
}
}
print("movieCount = \(movieCount) songCount = \(songCount)")
复制代码
Any与AnyObject区别bash
as,as?,as!函数
class Animal {}
class Dog: Animal {}
/*** as使用场景 ***/
//1. as值类型
var a = 4
let b = a as Int
//2. as向上转型
var c = Dog()
let d = c as Animal
//3. switch,case匹配对象
switch d {
case _ as Dog :
break
default:
break
}
//4. 消除Any类型警报
var g: Int?
print(g as Any)
var h: Int? = 5
print(h!)
print(h as Any)
/*** as?使用场景 ***/
//1. 向下转型可能会失败
var e = d as? Dog
/*** as!使用场景 ***/
//1. 向下转型确保必定成功
var f = d as! Dog
复制代码