加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift2 类型转换

发布时间:2020-12-14 01:59:47 所属栏目:百科 来源:网络整理
导读: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 ar
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读