【发布时间】:2016-07-20 16:02:22
【问题描述】:
我有两个 for 循环试图做同样的事情:
for item in components where item is UpdateableComponent
{
item.update()
}
for item in components
{
if let component = item as? UpdateableComponent
{
component.update()
}
}
components 是 Component 对象的数组。 UpdateableComponent 是一个协议,它基本上会定期更新特定的 Component。 Component 有子类,例如 Timer、Player、Enemy 和其他与游戏相关的类,其中一些符合 UpdateableComponent 协议,而另一些则不符合。
第一个循环抛出Component没有成员更新的错误,这是真的,但UpdateableComponent协议有。为什么 where 子句不过滤数组?第二个循环编译,但它会给我想要的效果吗?虽然不如第一个干净,但我觉得它们(应该)达到相同的效果。
为什么第一个循环不是将components 数组过滤为符合UpdateableComponent 协议的对象的有效选项?
【问题讨论】:
标签: arrays swift loops for-loop protocols