struct associated enum中的计算属性

时间:2017-12-30 04:10:38

标签: swift enums

我正在尝试在枚举和结构之间建立关系。我想在一个结构中有一个计算属性,它返回枚举的每个元素。但是,struct没有这个枚举的实例 - 它更像是一个静态实现。我正在寻找有关语法的建议,以使此代码正常工作 - 或者可能是表示我的类型的更好方法。以下是示例代码:

<script type="text/javascript">
    var pageURL = window.location.href;
    var lastURLSegment = pageURL.substr(pageURL.lastIndexOf('/') + 1);
    document.getElementById("getLink").innerhtml = lastURLSegment;
</script>

<div id="getLink"></div>

当然以上都没有编译。然而,这是我正在尝试做的一个很好的例子。在这个例子中,我不想在Scale中使用ScaleDegree的实例,但我确实希望Scale能够为每个ScaleDegree提供结果。建议以优雅的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

你可以将triad作为enum本身的一部分:

enum ScaleDegree: Int {
    case tonic
    case supertonic

    var triad: [Int] {
        switch self {
        case .tonic:
            return [1,3,5]
        case .supertonic:
            return [2,4,6]
        }
    }
}

或者把它变成结构中的一个函数:

struct Scale {
    func triad (degree: ScaleDegree) -> [Int] {
        switch degree {
        case .tonic: return [1, 3, 5]
        case .supertonic: return [2, 4, 6]
        }
    }
}