如何在swift中使用if语句检查枚举?

时间:2016-01-17 08:38:11

标签: swift if-statement enums operators

今天我正在编写一个应用程序,需要将一些Double更正为一些有效的数字/数字(sig fig)。用户可以设置号码。 sig fig转换为。我将这条信息存储在NSUserDefaults

我创建了一个枚举来表示这些设置,因为我想让我的代码更具可读性,而不仅仅是普通的旧整数。这是枚举:

enum SigFigOptions{
    case No
    case Yes(Int)
}

如果是.No,则数字将是准确的。如果是.Yes,则会更正数字。并且sig fig的数量存储在相关值中。

然后我在枚举中创建了一个名为correctTo的方法。

func correctTo (i: Double) -> Double {
    if self == .No {

    }
}

当我写这篇文章的时候,我看到有一个语法错误,说这是不明确的。所以我把它改成了:

if self == SigFigOptions.No

但后来它说==不能用于两种SigFigOptions类型。

我真的不明白!我知道我可以使用switch来执行此操作。但我认为在有很多案例时应该使用switch。在这种情况下,我认为最好使用if语句来增强可读性。但我无法比较它们!

您能告诉我如何使用if语句比较枚举吗?

哦顺便说一句,如果你知道算法来纠正某个sig的数字。请好好向我展示。

1 个答案:

答案 0 :(得分:18)

您可以使用图案装订:private readonly ConcurrentDictionary<string, SemaphoreSlim> _keyLocks = new ConcurrentDictionary<string, SemaphoreSlim>(); private readonly ConcurrentDictionary<string, Store> _cache = new ConcurrentDictionary<string, Store>(); public async Task<Store> GetStoreByUsernameAsync(string username) { Store value; // get the semaphore specific to this username var keyLock = _keyLocks.GetOrAdd(username, x => new SemaphoreSlim(1)); await keyLock.WaitAsync().ConfigureAwait(false); try { // try to get Store from cache if (!_cache.TryGetValue(username, out value)) { // if value isn't cached, get it from the DB asynchronously value = await _storeRepository.GetSingleAsync(x => x.UserName == username).ConfigureAwait(false); // cache value _cache.TryAdd(username, value); } } finally { keyLock.Release(); } return value; }