Swift 为什么我';我有我的子类的方法吗?

Swift 为什么我';我有我的子类的方法吗?,swift,class,object,types,Swift,Class,Object,Types,我知道song是一个MediaItem实例,但我正在用song实例初始化它 我的歌是什么类型的?这是一首MediaItem还是一首Song 我应该使用哪种方法 class MediaItem { var name: String init(name: String) { self.name = name } } class Movie: MediaItem { var director: String init(name: String,

我知道song是一个
MediaItem
实例,但我正在用
song
实例初始化它

我的歌是什么类型的?这是一首
MediaItem
还是一首
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)
    }
}

var song : MediaItem = Song(name: "Mateo",artist: "Romeo")


song
是您声明为
MediaItem
实例的
song
实例。歌曲可以是媒体项(通过继承),但媒体项不一定是歌曲

var song = Song(name: "Mateo",artist: "Romeo")
将其声明为
MediaItem
的“妙招”在于,如果不强制向下播放,就不能显式向下播放
song

类型推断是首选方法;更具可读性和简洁性:

song as Song // raises the error "'MediaItem' is not convertible to 'Song'; did you mean to use 'as!' to force downcast?"
song as! Song // forced downcast is allowed

song
是您声明为
MediaItem
实例的
song
实例。歌曲可以是媒体项(通过继承),但媒体项不一定是歌曲

var song = Song(name: "Mateo",artist: "Romeo")
将其声明为
MediaItem
的“妙招”在于,如果不强制向下播放,就不能显式向下播放
song

类型推断是首选方法;更具可读性和简洁性:

song as Song // raises the error "'MediaItem' is not convertible to 'Song'; did you mean to use 'as!' to force downcast?"
song as! Song // forced downcast is allowed

嘿,我听不懂:(var song:MediaItem=song(名字:“Mateo”,艺术家:“Romeo”)那么song这是一首MediaItem还是一首歌?对不起,我也在努力理解英文:(这是一首
歌曲
,你告诉编译器是一首
MediaItem
。因为你对编译器隐瞒了它的类型,所以它将它视为一个媒体项,即使它实际上是一首歌曲实例。嘿,我没听清楚:(var Song:MediaItem=Song(名字:“Mateo”,艺术家:“Romeo”)song这是一首mediaitem还是一首歌曲?对不起,我也在试着理解英文:(这是一首<代码>歌曲,你告诉编译器是一首<代码>mediaitem。因为你向编译器谎报了它的类型,所以编译器将它视为一个媒体项目,即使它实际上是一个歌曲实例。
var song = Song(name: "Mateo",artist: "Romeo")