swift2 类型转换

前端之家收集整理的这篇文章主要介绍了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
原文链接:https://www.f2er.com/swift/326538.html

猜你在找的Swift相关文章