在iOS 11(Xcode 9 beta 5)中,我正在调用UIDynamicAnimator的items(in:)
方法并立即崩溃:
NSArray元素与Swift Array元素类型不匹配
这是怎么回事?
最佳答案
您发现了一个错误。 (已向Apple提交,雷达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:)
返回的数组中。由于存在这些虚假对象,因此数组无法跨越从Objective-C到Swift的桥梁;在Swift中将返回的数组键入为[UIDynamicItem]
,但是该数组包含的内容不是UIDynamicItem对象。扩展程序通过不跨桥来解决此问题。我们留在NSArray Objective-C世界中,过滤掉虚假对象,然后越过桥。
关于ios - UIDynamicAnimator项目(in :)在iOS 11中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45774897/