swift学习笔记

第十九章 类型转换

2017-07-20  本文已影响0人  运柱

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")

    }

}

上一篇 下一篇

猜你喜欢

热点阅读