Swift 类型推断

类型推断

import UIKit

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: "北京爱情故事", director: "陈思诚"),
    Song(name: "终于等到你", artist: "张靓颖"),
    Movie(name: "北京遇上西雅图", director: "薛晓路"),
    Song(name: "一次就好", artist: "王凯"),
    Song(name: "匆匆那年", artist: "王菲")
]

var movieCount = 0
var songCount = 0
for item in library {
    if item is Movie {
        movieCount += 1
    } else if item is Song {
        songCount += 1
    }
}

print("Media library contains \(movieCount) movies and \(songCount) songs")

for item in library {
    if let movie = item as? Movie {
        print("电影: \(movie.name), 导演 \(movie.director)")
    } else if let song = item as? Song {
        print("歌曲: \(song.name), 演唱者 \(song.artist)")
    }
}

let someObjects: [AnyObject] = [
    Movie(name: "北京爱情故事", director: "陈思诚"),
    Movie(name: "北京遇上西雅图", director: "薛晓路"),
    Movie(name: "失恋三十三天", director: "滕华涛")
]

for object in someObjects {
    let movie = object as! Movie
    print("电影: \(movie.name), 导演 \(movie.director)")
}

for movie in someObjects as! [Movie] {
    print("电影: \(movie.name), 导演 \(movie.director)")
}

var things = [Any]()
things.append(0)
things.append(0.0)
things.append(520)
things.append(3.14159)
things.append("hello")
things.append(Movie(name: "失恋三十三天", director: "滕华涛"))
things.append({
    (name: String) -> String in "I Love U, \(name)"
})
things.append(-1992.85)

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 movie as Movie:
        print("电影: \(movie.name), 导演 \(movie.director)")
    case let stringConverter as (String) -> String:
        print(stringConverter("XiaoYao"))
    default:
        print("something else")
    }
}

console log 如下


类型推断.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,398评论 2 17
  • 变量 声明变量 命名变量区分大小写的语言第一个字符是字母或下划线_,数字不能作为第一个字符字符必须是字母,数字或者...
    flyingtoparis阅读 4,237评论 0 0
  • 1.JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么? ...
    saintkl阅读 2,795评论 0 0
  • JavaScript之父:Brendan Eich 。 -基本语法:借鉴了C语言和Java语言。-数据结构:借鉴了...
    饥人谷_kule阅读 3,762评论 0 0

友情链接更多精彩内容