直接返回具有关联类型的枚举值

时间:2019-03-13 19:41:41

标签: swift enums

这是我的代码:

enum Pet {
    case dog(Int), cat(String)
}

protocol PetHolder {
    associatedtype Food

    func determineFood(from: Pet) -> Food?
}

struct DogHolder: PetHolder {
    typealias Food = Int

    func determineFood(from: Pet) -> Int? {
        // Possible one liner? Enum extension?
        switch from {
        case .dog(let food):
            return food
        default:
            return nil
        }
    }
}

在实际代码中,Pet是一个生成的巨大枚举。我们有很多类似DogHolder的类,它们应基于Pet中案例的关联类型提取数据。

为每个XHolder编写以下内容(如上所示)是不可维护的:

// Possible one liner? Enum extension?
switch from {
    case .dog(let food):
        return food
    default:
        return nil
    }
}

这将导致一行行,其中仅case .dog(let food):会有所不同。

我想查看它是否包含特定情况,并返回该枚举的唯一一种关联类型,该类型与它正在实现的协议的关联类型完全相同。枚举Pet始终具有一个关联值(再次与对象所实现的协议完全相同)。

编辑:

我现在知道了,但是如果可以并插入可能的nil值,我可以删除else吗?

if case let Pet.dog(food) = from {
   return food
} else {
    return nil
}

0 个答案:

没有答案