我需要在两个不同的数组中匹配项(一个是导入的项,另一个是与导入项共享一些属性的本地项),以同步两个完全不同的数据库。我需要使用几个标准来进行匹配,以增强查找正确的本地项并将其与导入项匹配的鲁棒性。我可以在同一个循环中检查每个标准,但这太昂贵了,因为这些标准是按照降序成功的可能性来检查的。因此,在我的第一个实现中,我使用了一个名为found的布尔标志来标记其他条件的检查应该被忽略。
使用伪代码:
// calling code for the matching
for item in importedItems {
item.match() }在导入的项目类中:
match()
{
var found = false
for localItem in localItems
{
if (self.property == localItem.property)
{
// update the local item here
found = true
break
}
}
// match with less likely 2nd property
if (!found)
{
for localItem in localItems
{
if (self.property2 == localItem.property2)
{
// update the local item here
found = true
break
}
}
}if !found {...}模式被重复了两次,但可能性更小。
在查看此代码之后,可以通过返回来优化此代码,而不是在有匹配时中断。
所以,我的问题是,“在Swift中使用return而不是break,提前离开循环有什么副作用吗?”我在这里找不到任何明确的答案,无论是在Swift文档中,还是在讨论Swift流量控制的博客中。
发布于 2016-12-01 13:30:10
不,没有副作用,正好相反,它更有效。
它就像布尔表达式中的短路评估。
但是您的代码是一个糟糕的例子,因为found不能在函数之外使用。
这是一个更实用的返回布尔值的示例。
func match() -> Bool
{
for localItem in localItems
{
if (self.property == localItem.property)
{
// update the local item here
return true
}
}
....
return false
}发布于 2016-12-01 13:21:36
如果您确信您可以返回,因为在循环之后不需要做任何其他操作,那么使用return就没有副作用了。
https://stackoverflow.com/questions/40911066
复制相似问题