Swift: 对具有多种类型的变量建模
Swift: Modeling a variable with multiple types
我正在构建一个闹钟应用,其中每个闹钟都有与之关联的声音。
声音可以是歌曲、艺术家([song])或播放列表([song]);所有这些都有标题和其他特定属性。
我希望能够做 alarm.sound.title 之类的事情并拥有标题 return,无论它是歌曲、艺术家还是播放列表。我还需要实现应用根据歌曲、艺术家或播放列表的不同而表现不同的逻辑。
我不确定我是否应该使用类型 属性 和子 class 歌曲、艺术家、播放列表创建声音 class,或者是否有更好的方法来构建数据。我阅读了有关类型转换的内容,但我不确定这是否是正确的方向。
任何关于如何建模的建议都将不胜感激。谢谢
既然您想使用 Swift,我建议您使用协议。那会给你所需要的。简单示例:
protocol Sound {
let title: String { get }
let length: TimeInterval { get }
}
协议将定义接口。然后你可以创建各种符合协议的 类 - 底层实现可以完全不同:
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
}
}
然后您可以简单地访问任何符合 Sound
协议的对象上的 title
:
let sound1: Sound = Song(title: "Song", length: 1)
let sound2: Sound = Artist()
print("\(sound1.title)") // prints: Song
print("\(sound2.title)") // prints: Artist
我正在构建一个闹钟应用,其中每个闹钟都有与之关联的声音。
声音可以是歌曲、艺术家([song])或播放列表([song]);所有这些都有标题和其他特定属性。
我希望能够做 alarm.sound.title 之类的事情并拥有标题 return,无论它是歌曲、艺术家还是播放列表。我还需要实现应用根据歌曲、艺术家或播放列表的不同而表现不同的逻辑。
我不确定我是否应该使用类型 属性 和子 class 歌曲、艺术家、播放列表创建声音 class,或者是否有更好的方法来构建数据。我阅读了有关类型转换的内容,但我不确定这是否是正确的方向。
任何关于如何建模的建议都将不胜感激。谢谢
既然您想使用 Swift,我建议您使用协议。那会给你所需要的。简单示例:
protocol Sound {
let title: String { get }
let length: TimeInterval { get }
}
协议将定义接口。然后你可以创建各种符合协议的 类 - 底层实现可以完全不同:
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
}
}
然后您可以简单地访问任何符合 Sound
协议的对象上的 title
:
let sound1: Sound = Song(title: "Song", length: 1)
let sound2: Sound = Artist()
print("\(sound1.title)") // prints: Song
print("\(sound2.title)") // prints: Artist