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