如何从一组结构中检索某个结构?

时间:2017-10-05 17:28:38

标签: swift struct

所以,让我说我有一个由三个元素组成的结构 - SPEED_OF_LIGHT,SPEED_OF_SOUND和SPEED_OF_PERSON,如下所示:

public struct Fast {
    public let speed: Double

    private init(speed: Double) {
        self.speed = speed
    }

    public static let SPEED_OF_LIGHT = Fast(speed: 300000000)
    public static let SPEED_OF_SOUND = Fast(speed: 340)
    public static let SPEED_OF_PERSON = Fast(speed: 1.5)
}

如果我有两倍的让我们说340,我会如何迭代所有可能性,直到找到正确的匹配?为了准确显示我的意思,我有一个可以完成我想要的工作代码片段。这是在Java 中完成的

public enum Fast {
    SPEED_OF_LIGHT(300000000),
    SPEED_OF_SOUND(340),
    SPEED_OF_PERSON(1.5);

    private double speed;

    private Fast(double speed) {
        this.speed = speed;
    }

    public static Fast getFast(double speed) {
        for (Fast f : Fast.values()) {
            if (f.speed == speed) return f;
        }
        throw new IllegalArgumentException();
    }
}

在上述情况下,调用getFast(340)将返回SPEED_OF_SOUND。我如何在Swift中做类似的事情?

1 个答案:

答案 0 :(得分:1)

你可能想要使用一个枚举(Swift也有它们),但没有相当于你调用来获取列表的values()函数。

您必须使用完整列表向枚举中添加一个数组成员 - 这将是重复的情况,因此容易出错。

有关如何操作的详细信息,请参阅此答案:https://stackoverflow.com/a/24137319/3937

有些技巧/黑客试图获得像values这样的东西,但是对于每个版本的swift来说它都不同,在我看来并不值得麻烦。