首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Swift中退出返回循环而不是中断有什么副作用吗?

在Swift中退出返回循环而不是中断有什么副作用吗?
EN

Stack Overflow用户
提问于 2016-12-01 12:46:12
回答 2查看 93关注 0票数 0

我需要在两个不同的数组中匹配项(一个是导入的项,另一个是与导入项共享一些属性的本地项),以同步两个完全不同的数据库。我需要使用几个标准来进行匹配,以增强查找正确的本地项并将其与导入项匹配的鲁棒性。我可以在同一个循环中检查每个标准,但这太昂贵了,因为这些标准是按照降序成功的可能性来检查的。因此,在我的第一个实现中,我使用了一个名为found的布尔标志来标记其他条件的检查应该被忽略。

使用伪代码:

代码语言:javascript
复制
// calling code for the matching

for item in importedItems {
item.match() }

在导入的项目类中:

代码语言:javascript
复制
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流量控制的博客中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-01 13:30:10

不,没有副作用,正好相反,它更有效。

它就像布尔表达式中的短路评估

但是您的代码是一个糟糕的例子,因为found不能在函数之外使用。

这是一个更实用的返回布尔值的示例。

代码语言:javascript
复制
func match() -> Bool
{
    for localItem in localItems
    {
        if (self.property == localItem.property)
        {
            // update the local item here    
            return true
        }
    }
   ....


   return false
}
票数 1
EN

Stack Overflow用户

发布于 2016-12-01 13:21:36

如果您确信您可以返回,因为在循环之后不需要做任何其他操作,那么使用return就没有副作用了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40911066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档