我刚刚了解了for case let,这两个版本的循环具有相同的输出。这让我不禁纳闷,对于let和一个普通的for循环,在性能上有什么不同吗?
我开始考虑这个问题,因为我听说我不应该处理开关的情况,如果-如果是一样的话,我可以完成非常不同的事情。
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()
}
}发布于 2020-12-14 03:32:57
正如其他人所评论的,代码的性能并不是问题所在。相反,建立一个决策的精神框架才是问题所在。
也就是说,作为程序员,你怎样才能减少你的大脑将决策引导到代码中所需的时间?你不能让自己每次都有做出不同决定的自由,否则你自己的表现就会受到影响。
你所做的任何选择都是可以接受的,但没有一个决策框架是不能接受的。
我推荐的一个助记符是思维模式,“我将利用封装样板的语言特性,而不是允许自己将样板放入源”。这将给你留下:
for case let son as Son in people {
son.speak()
}for case let语法是一种基于选项筛选序列的方法。
鉴于此:
var daddies: [Daddy?] = [Son(), Daddy()]在这里,爸爸是Daddy?型的
for daddy in daddies {…但是在这里,它被打开到Daddy
for case let daddy? in daddies {而这个…
for person in people {
if let son = person as? Son {
son.speak()
}
}…只是这方面的语法糖:
for person in people {
if case let son? = person as? Son {
son.speak()
}
}演示将if语句提升到for循环(它的正确范围)的中间步骤将不会编译…。
for case let son? as? Son in people {…所以,相反,你必须跳到
for case let son as Son in people {这与开关语句使用的语法糖相同,这也不允许有条件的抛出。
https://stackoverflow.com/questions/65282155
复制相似问题