でクラッシュし、私はUIDynamicAnimatorのitems(in:)
メソッドを呼び出すと、すぐにクラッシュしています:UIDynamicAnimator項目(中:) iOSの11(Xcodeの9ベータ5)ではiOSの11
NSArrayの要素は、スウィフト配列要素型と一致しませんでした
何が起こっているのですか?
でクラッシュし、私はUIDynamicAnimatorのitems(in:)
メソッドを呼び出すと、すぐにクラッシュしています:UIDynamicAnimator項目(中:) iOSの11(Xcodeの9ベータ5)ではiOSの11
NSArrayの要素は、スウィフト配列要素型と一致しませんでした
何が起こっているのですか?
あなたはバグを発見しました。 (アップルに提出され、レーダー33979954.)うまくいけば、それはすぐに修正されますが、それまで、ここでの修正があります:
extension UIDynamicAnimator {
func views(in rect: CGRect) -> [UIView] {
let nsitems = self.items(in: rect) as NSArray
return nsitems.flatMap{$0 as? UIView}
}
}
今の代わりitems(in:)
のview(in:)
を呼び出して、すべてがうまくなります。
問題は、items(in:)
から返された配列に疑似オブジェクトが入れられていることです。これらの疑わしいオブジェクトのために、アレイはObjective-CからSwiftにブリッジを渡すことはできません。返される配列はSwiftに[UIDynamicItem]
と入力されますが、配列にはUIDynamicItemオブジェクトではないものが含まれています。
拡張機能は、ブリッジを越えないようにすることで回避できます。私たちはNSArray Objective-Cの世界にとどまり、疑似オブジェクトを除外し、そしてが橋を渡ります。