我正在构建一个警报应用程序,其中每个警报都有与之关联的声音。
声音可以是歌曲,艺术家([歌曲])或播放列表([歌曲]);所有这些都有标题和其他特定属性。
我希望能够做一些像alarm.sound.title这样的事情,无论是歌曲,艺术家还是播放列表,都会返回标题。我还需要实现逻辑,其中应用程序的行为取决于它是歌曲,艺术家还是播放列表。
我不确定是否应该创建一个具有type属性和子类歌曲,艺术家,播放列表的声音类,或者是否有更好的方法来构建数据。我读过关于类型转换的内容,但我不确定这是否是正确的方向。
任何有关如何建模的建议都将受到赞赏。感谢
答案 0 :(得分:0)
由于你想使用Swift,我建议使用协议。这会给你所需要的。简单的例子:
class Song: Sound {
var title: String
var length: TimeInterval
init(title: String, length: TimeInterval) {
self.title = title
self.length = length
}
}
class Artist: Sound {
var title: String {
return "Artist"
}
var length: TimeInterval {
return 11.1
}
}
协议将定义接口。然后你可以创建符合协议的各种类 - 底层实现可以完全不同:
title
然后,您只需在符合Sound
协议的任何对象上访问let sound1: Sound = Song(title: "Song", length: 1)
let sound2: Sound = Artist()
print("\(sound1.title)") // prints: Song
print("\(sound2.title)") // prints: Artist
:
{{1}}