Swift(十九、类型转换&嵌套类型)
1、Swift入门学习笔记(第一版),对Swift的基础知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~ 2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。 十九、类型转换&嵌套类型一、类型转换可以判断实例的类型,也可将实例看做是其父类或者子类的实例 以下面的实例为例子 class MediaItem {
func testPrint() {
print("MediaItem")
}
}
class Movie:MediaItem {
override func testPrint() {
print("Movie")
}
}
class Song:MediaItem {
override func testPrint() {
print("Song")
}
}
创建一个 let library = [Movie(),Song(),Movie(),Movie()]
1、检查类型
var movieCount = 0
var songCount = 0
for item in library {
if item is Movie {
++movieCount
} else if item is Song {
++songCount
}
}
print("Movie:(movieCount),Song:(songCount)")
Output: Movie:3,Song:2
如果把 2、向下转型有时候常量或变量实际属于一个子类,可以向下转到它的子类型,用
前面已经说了上述例子在迭代时是以MediaItem类迭代的,这里我们向下转型 for item in library {
if let movie = item as? Movie {
movie.testPrint()
} else if let song = item as? Song {
song.testPrint()
}
}
Output: Movie Song Song Movie Movie 注意:转换没有真的改变实例或者它的值。潜在的根本的实例保持不变,只是简单地把它被转换成的类来使用 3、Any和AnyObject的类型转换
这个虽然好用,但是代码中还是有明确类型最好 var testAny = [Any]()
testAny.append(2.18)
testAny.append((2.0,2.18))
testAny.append("Hello")
testAny.append(Movie())
testAny.append({(name:String)->String in
return "Hello (name)"})
各种类型都OK,包括方法类型和非 二、嵌套类型类,枚举,结构体之间可以相互嵌套 嵌套类型的引用点语法即可 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |