当数组具有相同的枚举情况时发出警告

问题描述 投票:-1回答:1

我有一个枚举

public enum Option {
    case first(CGFloat),
    case second(CGFloat),
    case third(Bool),
    case fourth
}

以及一个带有这些枚举数组的函数

func gimme(the options: [Option]) -> Result

我想做的是,当有人添加两个相同的案例时,警告/错误,但我不知道如何。

gimme(the: [first(1.0), second(2.0), third(false)]) // fine

gimme(the: [first(1.0), first(2.0), third(false]) // not fine

它不是关联的值,只是你想要发送两次相同的情况..我假设它是一个像...这样的扩展...

extension Array where Element == Option {

   // No idea how to do this
}

但我不确定我需要覆盖什么。

谢谢你的时间。

arrays swift enums compiler-warnings
1个回答
0
投票

如果你想只有uniq选项而不关心参数,那么只需改变你的功能。为了能够只传递感兴趣的选项,如果您根本不需要选项,则可以使用默认值+选项:

func gimme(first: CGFloat? = nil, second: CGFloat? = nil, third: Bool? = nil, ...)
gimme(third: True)
func gimme(first: CGFloat = 0, second: CGFloat = 0, third: Bool = false, ...)
gimme(second: 10.2)

如果您希望能够在对象之间传递选项,请将它们包装在struct中:

struct GimmedArguments {
    var first: CGFloat?
    var second: CGFloat?
    var third: Bool?
}

func gimme(the arguments: GimmedArguments) { ... }

在编译时捕获可能会有问题,因为在使用变量而不是普通值时将如何处理:

gimme(the: var1, var2, var3)

你可以尝试写一些swiftlint规则或自定义脚本,但恕我直言,它可能是矫枉过正。

相反,你可以添加运行时检查:

func myFunction(array: [Int]) {
    precondition(Set(array).count == array.count, "Array should not contain same elements")
}

如果您只想确保使用唯一元素调用函数,请改用Set。它将保证所有元素uniq。

© www.soinside.com 2019 - 2024. All rights reserved.