UIDynamicAnimator items(in:) 在 iOS 11 中崩溃
UIDynamicAnimator items(in:) crashes in iOS 11
在 iOS 11 (Xcode 9 beta 5) 中,我正在调用 UIDynamicAnimator 的 items(in:)
方法并立即崩溃:
NSArray element failed to match the Swift Array Element type
怎么回事?
您发现了一个错误。 (由 Apple 提交,雷达 33979954。)希望它能尽快修复,但在那之前,这里是修复:
extension UIDynamicAnimator {
func views(in rect: CGRect) -> [UIView] {
let nsitems = self.items(in: rect) as NSArray
return nsitems.flatMap{[=10=] as? UIView}
}
}
现在调用 view(in:)
而不是 items(in:)
,一切都会好起来的。
问题是将虚假对象放入从 items(in:)
返回的数组中。由于这些虚假对象,数组无法跨过从 Objective-C 到 Swift 的桥;返回的数组在 Swift 中输入为 [UIDynamicItem]
,但该数组包含的内容不是 UIDynamicItem 对象。
扩展通过不过桥来解决这个问题。我们留在 NSArray Objective-C 世界中,过滤掉虚假对象,然后 然后 过桥。
在 iOS 11 (Xcode 9 beta 5) 中,我正在调用 UIDynamicAnimator 的 items(in:)
方法并立即崩溃:
NSArray element failed to match the Swift Array Element type
怎么回事?
您发现了一个错误。 (由 Apple 提交,雷达 33979954。)希望它能尽快修复,但在那之前,这里是修复:
extension UIDynamicAnimator {
func views(in rect: CGRect) -> [UIView] {
let nsitems = self.items(in: rect) as NSArray
return nsitems.flatMap{[=10=] as? UIView}
}
}
现在调用 view(in:)
而不是 items(in:)
,一切都会好起来的。
问题是将虚假对象放入从 items(in:)
返回的数组中。由于这些虚假对象,数组无法跨过从 Objective-C 到 Swift 的桥;返回的数组在 Swift 中输入为 [UIDynamicItem]
,但该数组包含的内容不是 UIDynamicItem 对象。
扩展通过不过桥来解决这个问题。我们留在 NSArray Objective-C 世界中,过滤掉虚假对象,然后 然后 过桥。