UIDynamicAnimator项目(在:)中崩溃在iOS 11中
在iOS 11(Xcode 9 beta 5)中,我正在调用UIDynamicAnimator的items(in:)
方法中并立即崩溃:
NSArray元素无法匹配Swift数组元素类型
这是怎么回事?
你发现了一个错误。 (提交苹果,雷达33979954.)希望它很快就会修复,但在那之前,这是修复:
extension UIDynamicAnimator { func views(in rect: CGRect) -> [UIView] { let nsitems = self.items(in: rect) as NSArray return nsitems.flatMap{$0 as? UIView} } }
现在调用view(in:)
而不是items(in:)
,一切都会很好。
问题是伪对象被放入从items(in:)
返回的数组中items(in:)
。 由于这些虚假对象,数组不能跨越从Objective-C到Swift的桥; 返回的数组在Swift中作为[UIDynamicItem]
键入,但该数组包含的不是UIDynamicItem对象。
扩展的工作原理是不穿越桥梁。 我们留在NSArray Objective-C世界,过滤掉虚假物体, 然后过桥。