我有一个枚举
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
但是我不确定需要覆盖什么。
感谢您的时间。
答案 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
。它将保证所有元素都是唯一的。