【发布时间】:2019-09-14 22:22:22
【问题描述】:
当我使用 case let 投射视图时,Swift 可以正确识别循环内 circle 到 PinCircleView 的类型
for case let (index, circle) as (Int, PinCircleView) in pinCirclesStackView.arrangedSubviews.enumerated() {
print(index, circle) // <- circle is PinCircleView and print's as expected
}
但如果我使用 is 进行类型检查,Swift 仍然只允许我访问 circle,因为它会是 UIView
for (index, circle) in pinCirclesStackView.arrangedSubviews.enumerated() where circle is PinCircleView {
print(index, circle) // <- circle is UIView but print's PinCircleView
}
如果我理解正确,is 不会强制转换,而只会检查类型,但是如果类型匹配,这会引出另一个问题,为什么我不能“完全”使用它?
【问题讨论】:
-
好吧,那是对的,但在那之后我仍然执行类型检查,它不应该对生成的元组进行操作吗?如果其中一些视图不是
PinCircleView类型,它们将不会出现在循环 afaik 中
标签: swift casting typechecking