首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for case let和for循环+ if let之间有区别吗?

for case let和for循环+ if let之间有区别吗?
EN

Stack Overflow用户
提问于 2020-12-14 00:21:44
回答 1查看 190关注 0票数 2

我刚刚了解了for case let,这两个版本的循环具有相同的输出。这让我不禁纳闷,对于let和一个普通的for循环,在性能上有什么不同吗?

我开始考虑这个问题,因为我听说我不应该处理开关的情况,如果-如果是一样的话,我可以完成非常不同的事情。

代码语言:javascript
复制
class Daddy {

}

class Son: Daddy {
    func speak() {
        print("I am son!")
    }
}

var people = [Son(), Daddy()]

for case let person as Son in people {
    person.speak()
}

for person in people {
    if let son = person as? Son {
        son.speak()
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-14 03:32:57

正如其他人所评论的,代码的性能并不是问题所在。相反,建立一个决策的精神框架才是问题所在。

也就是说,作为程序员,你怎样才能减少你的大脑将决策引导到代码中所需的时间?你不能让自己每次都有做出不同决定的自由,否则你自己的表现就会受到影响。

你所做的任何选择都是可以接受的,但没有一个决策框架是不能接受的。

我推荐的一个助记符是思维模式,“我将利用封装样板的语言特性,而不是允许自己将样板放入源”。这将给你留下:

代码语言:javascript
复制
for case let son as Son in people {
  son.speak()
}

for case let语法是一种基于选项筛选序列的方法。

鉴于此:

代码语言:javascript
复制
var daddies: [Daddy?] = [Son(), Daddy()]

在这里,爸爸是Daddy?型的

代码语言:javascript
复制
for daddy in daddies {

…但是在这里,它被打开到Daddy

代码语言:javascript
复制
for case let daddy? in daddies {

而这个…

代码语言:javascript
复制
for person in people {
  if let son = person as? Son {
    son.speak()
  }
}

…只是这方面的语法糖:

代码语言:javascript
复制
for person in people {
  if case let son? = person as? Son {
    son.speak()
  }
}

演示将if语句提升到for循环(它的正确范围)的中间步骤将不会编译…。

代码语言:javascript
复制
for case let son? as? Son in people {

…所以,相反,你必须跳到

代码语言:javascript
复制
for case let son as Son in people {

这与开关语句使用的语法糖相同,这也不允许有条件的抛出。

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

https://stackoverflow.com/questions/65282155

复制
相关文章

相似问题

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