第十九章 类型转换

class MediaItem {

    var name: String

    init(name: String) {

        self.name = name

    }

}

class Movie: MediaItem {

    var director: String

    init(name: String, director: String) {

        self.director = director

        super.init(name: name)

    }

}

class Song: MediaItem {

    var artist: String

    init(name: String, artist: String) {

        self.artist = artist

        super.init(name: name)

    }

}

let library = [

    Movie(name: "Casablanca", director: "Michael Curtiz"),

    Song(name: "Blue Suede Shoes", artist: "Elvis Presley"),

    Movie(name: "Citizen Kane", director: "Orson Welles"),

    Song(name: "The One And Only", artist: "Chesney Hawkes"),

    Song(name: "Never Gonna Give You Up", artist: "Rick Astley")

]

var movieCount = 0

var songCount = 0

for  item in library {

    if item is Movie {

        movieCount += 1

    } else if item is Song {

        songCount += 1

    }

}

print("movie count = \(movieCount), and song count = \(songCount)")

for item in library {

    if let movie = item as? Movie {

        print("Movie: '\(movie.name)', director. \(movie.director)")

    } else if let song = item as? Song {

        print("Song: '\(song.name)', artist. \(song.artist)")

    }

}

var things = [Any]()

things.append(0)

things.append(0.0)

things.append(42)

things.append("hello")

things.append((3.0, 5.0))

things.append(["Alice": "Chips"])

things.append(Movie(name: "shimianmaifu", director: "zhangyimou"))

things.append({(name: String) -> String in "Hello, \(name)"})

for thing in things {

    switch thing {

    case 0 as Int:

        print("zero as an Int")

    case 0 as Double:

        print("zero as a Double")

    case let someInt as Int:

        print("an integer value of \(someInt)")

    case let someDouble as Double where someDouble > 0:

        print("a positive double value of \(someDouble)")

    case is Double:

        print("some other double value that I don't want to print")

    case let someString as String:

        print("a string value of \"\(someString)\"")

    case let (x, y) as (Double, Double):

        print("an (x, y) point at \(x), \(y)")

    case let movie as Movie:

        print("a movie called '\(movie.name)', dir. \(movie.director)")

    case let stringConverter as (String) -> String:

        print(stringConverter("Michael"))

    case let dict as Dictionary<String, String>:

        for (name, favor) in dict {

            print("\(name)'s favorite food is \(favor)")

        }

    default:

        print("something else")

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容