微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift2 类型转换

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")
]
// the type of "library" is inferred to be [MediaItem]



检查类型


var movieCount = 0
var songCount = 0

for item in library {
    if item is Movie {
        ++movieCount
    } else if item is Song {
        ++songCount
    }
}

print("Media library contains \(movieCount) movies and \(songCount) songs")
// prints "Media library contains 2 movies and 3 songs"


向下转型


for item in library {
    if let movie = item as? Movie {
        print("Movie: '\(movie.name)',dir. \(movie.director)")
    } else if let song = item as? Song {
        print("Song: '\(song.name)',by \(song.artist)")
    }
}

// Movie: 'Casablanca',dir. Michael Curtiz
// Song: 'Blue Suede Shoes',by Elvis Presley
// Movie: 'Citizen Kane',dir. Orson Welles
// Song: 'The One And Only',by Chesney Hawkes
// Song: 'Never Gonna Give You Up',by Rick Astley


Any与AnyObject类型转换


let someObjects: [AnyObject] = [
    Movie(name: "2001: A Space Odyssey",director: "Stanley Kubrick"),Movie(name: "Moon",director: "Duncan Jones"),Movie(name: "Alien",director: "Ridley Scott")
]
for object in someObjects {
    let movie = object as! Movie
    print("Movie: '\(movie.name)',dir. \(movie.director)")
}
// Movie: '2001: A Space Odyssey',dir. Stanley Kubrick
// Movie: 'Moon',dir. Duncan Jones
// Movie: 'Alien',dir. Ridley Scott


for movie in someObjects as! [Movie] {
    print("Movie: '\(movie.name)',dir. Ridley Scott

var things = [Any]()

things.append(0)
things.append(0.0)
things.append(42)
things.append(3.14159)
things.append("hello")
things.append((3.0,5.0))
things.append(Movie(name: "Ghostbusters",director: "Ivan Reitman"))
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"))
    default:
        print("something else")
    }
}

// zero as an Int
// zero as a Double
// an integer value of 42
// a positive double value of 3.14159
// a string value of "hello"
// an (x,y) point at 3.0,5.0
// a movie called 'Ghostbusters',dir. Ivan Reitman
// Hello,Michael

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐