当数组具有相同的枚举大小写时发出警告

时间:2019-03-26 09:26:14

标签: arrays swift enums compiler-warnings

我有一个枚举

foreach ($se as $de){
    if (empty($de)) {
       continue;
    }
    foreach ($scores as $oppt):
        if (empty($oppt)) {
            continue;
        }

        echo $de."<br/>";
        // print_r (explode(" ",$de));

        $warranty = 'PPI';
        $att = $product->getResource()->getAttribute($de);
        if(!empty($att)){
            $avi = $att->getSource()->getOptionId($oppt);

            $product->setData($de, $avi);
            echo $avi."<br/>";
        }        
    endforeach;
}

还有一个包含这些枚举数组的函数

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

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

感谢您的时间。

1 个答案:

答案 0 :(得分: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")
}

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