gpt4 book ai didi

for-loop - 循环遍历某个类的所有对象的特殊语法?

转载 作者:行者123 更新时间:2023-11-28 07:14:21 25 4
gpt4 key购买 nike

我可以将这个组合的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com