作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以将这个组合的 for
-plus-if
压缩成一个 for
,
即我可以将前两行组合成一个循环指令吗?
它应该只访问 childNodes
中作为 MyNode
实例的那些对象。
for childNode in childNodes {
if let myNode = childNode as? MyNode {
// do something with myNode
}
}
最佳答案
我假设 childNodes
是一个数组。如果是,那么你可以过滤它:
for childNode in (childNodes.filter { $0 is MyNode }) {
println ("It's a node")
}
或者如果您更喜欢更明确的代码:
let nodes = childNodes.filter { $0 is MyNode }
for childNode in nodes {
println ("It's a node")
}
据我所知,在 swift 中,没有一种干净的方法可以将 for
循环与可选绑定(bind)结合起来以跳过一些迭代。
使用标准的 for
循环,结合一个闭包,给定一个索引,返回下一个包含 MyNode
实例的索引可能是可能的......但是我不会将其称为代码和可读性方面的简化:
let findNext = { (var index: Int) -> (node: MyNode?, next: Int) in
while index < childNodes.count {
if let node = childNodes[index] as? MyNode {
return (node, index)
}
++index
}
return (nil, index)
}
for var (node, index) = findNext(0); node != nil; (node, index) = findNext(index + 1) {
println ("it's a node: \(node!)")
}
关于for-loop - 循环遍历某个类的所有对象的特殊语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27013871/
我是一名优秀的程序员,十分优秀!