Swift-类型转换

来源:互联网 发布:java transient 方法 编辑:程序博客网 时间:2024/06/09 18:58

import UIKit

//***************************

//

//    1.定义基类MediaItem

//    2.定义子类Movie

//    3.定义子类Song

//

//***************************

 

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: "Movie1",director: "Dir1"),

    Movie(name: "Movie2",director: "Dir2"),

    MediaItem(name: "Media1"),

    Song(name: "Song1",artist: "Artist1"),

    Song(name: "Song2",artist: "Artist2")

]

 

//*****************************************

//

//    1.类型检查:

//   is来检查一个instance是否属于特定class

//

//*****************************************

 

var moviecount =0,songcount = 0

for itemin library {

    if item is Movie {

       moviecount++

    }elseif item is Song {

       ++songcount

    }

}

moviecount//2

songcount //2

 

//*****************************************

//

//    1.类型转换:

//   as来转换到它的子类型,

//   as?可以转换的同时强制解包

//

//*****************************************

 

for itemin library {

    if let movie =item as? Movie{

       println("movies name =\(movie.name), director =\(movie.director)")

    }elseif let song = itemas?Song{

       println("songsname = \(song.name), artist =\(song.artist)")

    }else{

       println("Just aMedia")

    }

}

 

 

//*****************************************

//

//    AnyAnyObject的转换

//    AnyObject:可以代表任何class的实例

//    Any:可以表示任何类型,除了方法类型

//

//*****************************************

 

let someOBJArray: [AnyObject]= [

    Movie(name: "Movie1",director: "Dir1"),

    Movie(name: "Movie2",director: "Dir2")

]

 

//逐项转为movie

for objectin someOBJArray {

    let movie = object asMovie

    println("Movie: \(movie.name),dir:\(movie.director)")

}

 

//整个数组转换为[Movie]

for moviein someOBJArrayas [Movie] {

    println("Movie: \(movie.name),dir:\(movie.director)")

}

 

 

var things: [Any] = []//or var things = [Any]()

things.append(0)

things.append(0.0)

things.append(7)

things.append(12.34)

things.append(-12.34)

things.append("hello")

things.append((1.0,2.0))

things.append(Movie(name:"Movie1",director: "D1"))

 

//switch语句的case中使用as来检查+匹配+转换到一个规定的类型

for thingin things {

    switch thing {

       case0asInt ://相当于let zeroas Int where zero == 0

           println("zero as an Int")

       case 0asDouble:

           println("zero as an Double")

       case let someIntas Int ://if let someInt =thing as Int

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

       case letsomeDouble as Doublewhere someDouble >0 :

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

       case is Double://if thing isDouble

           println("some other double value")

       case letsomeString as String:

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

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

           println("and (x, y) point at\(x), \(y)")

       case letmovie as Movie:

           println("a movie instance")

       default:

           println("something else")

    }

}

 

for thingin things {

    if let zero =thing as? Int{

       if zero == 0{

          println("zero as an Int")

       }

    }

}

0 0
原创粉丝点击