《swift2.0 官方教程中文版》 第2章-19类型转换

《swift2.0 官方教程中文版》 第2章-19类型转换,第1张

概述import Foundation /*定义一个类层次作为例子******************************************************/ //第一个代码片段定义了一个新的基础类 MediaItem 。这个类为任何出现在数字媒体库的媒体项提供基础功能 class MediaItem {     var name: String     init(name: Str


import Foundation


/*定义一个类层次作为例子******************************************************/

//第一个代码片段定义了一个新的基础类 MediaItem 。这个类为任何出现在数字媒体库的媒体项提供基础功能

class MediaItem {

var name: String

init(name: String) {

self.name = name

}

}


//下一个代码段定义了 MediaItem 的两个子类。第一个子类 MovIE 封装了与电影相关的额外信息,在父类( 者说基类)的基础上增加了一个 director (导演)属性,和相应的初始化器。第二个子类 Song,在父类的基 础上增加了一个 artist (艺术家)属性


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)

}

}


//最后一个代码段创建了一个数组常量 library,包含两个 MovIE 实例和三个 Song 实例。 library 的类型是在 它被初始化时根据它数组中所包含的内容推断来的。

let aa = Song(name: "Blue Suede Shoes",artist: "Elvis Presley")

let library: [AnyObject] = [

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




/*AnyAnyObject的类型转换******************************************************/

//Swift为不确定类型提供了两种特殊类型别名:

//? 可以代表任何class类型的实例。

//? 可以表示任何类型,包括方法类型(function types)

let someObjects: [AnyObject] = [

MovIE(name: "2001: A Space Odyssey",director: "Stanley Kubrick"),

MovIE(name: "Moon",director: "Duncan Jones"),

MovIE(name: "AlIEn",director: "RIDley Scott")

]


//因为知道这个数组只包含 MovIE 实例,你可以直接用( as! )下转并解包到不可选的 MovIE 类型:

for object in someObjects {

let movIE = object as! MovIE

print("MovIE: '\(movIE.name)',dir. \(movIE.director)")

}


//为了变为一个更短的形式,下转 someObjects 数组为 [MovIE] 类型来代替下转数组中每一项的方式。

for movIE in someObjects 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



//这里有个示例,使用 Any 类型来和混合的不同类型一起工作,包括方法类型和非 class 类型。它创建了一个 可以存储 Any 类型的数组 things

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

总结

以上是内存溢出为你收集整理的《swift2.0 官方教程中文版》 第2章-19类型转换全部内容,希望文章能够帮你解决《swift2.0 官方教程中文版》 第2章-19类型转换所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1081220.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存