Array.contains(其中:) 到 return return 为真的数组项
Array.contains(where:) to return Array item that returned true
在 Swift 中,假设我们有一个可拖动的 UIButton,它可以拖放到多个视图上。获取对所述视图的引用的最快方法是什么?
let Array: [UIViews] = [View1, View2, View3, View4, View5, View6]
func oneFingerSwipe(_ gesture:UIPanGestureRecognizer){
let pointInView = gesture.location(in: gesture.view)
switch(gesture.state){
case .changed:
Button.center = CGPoint(x: pointInView.x, y: pointInView.y)
case .ended:
if Array.contains(where: { [=12=].frame.contains(pointInView)}) {
// do something to said View([=12=]) through either Array[index] or reference to the View([=12=])
}
//长篇大论
if View1.frame.contains(pointInView) {
//do work to View1
} else if View2.frame.contains(pointInView) {
//do work to View2
} else if View3.frame.contains(pointInView) {
//do work to View3
} else if View4.frame.contains(pointInView) {
//do work to View4
} else if View5.frame.contains(pointInView) {
//do work to View5
} else if View6.frame.contains(pointInView) {
//do work to View6
}
default: break
}
}
您应该能够过滤视图数组并使用 first(where:)
函数获取第一个匹配的视图:
if let targetView = Array.first(where: {[=10=].frame.contains(pointInView)} ) {
...
}
在 Swift 中,假设我们有一个可拖动的 UIButton,它可以拖放到多个视图上。获取对所述视图的引用的最快方法是什么?
let Array: [UIViews] = [View1, View2, View3, View4, View5, View6]
func oneFingerSwipe(_ gesture:UIPanGestureRecognizer){
let pointInView = gesture.location(in: gesture.view)
switch(gesture.state){
case .changed:
Button.center = CGPoint(x: pointInView.x, y: pointInView.y)
case .ended:
if Array.contains(where: { [=12=].frame.contains(pointInView)}) {
// do something to said View([=12=]) through either Array[index] or reference to the View([=12=])
}
//长篇大论
if View1.frame.contains(pointInView) {
//do work to View1
} else if View2.frame.contains(pointInView) {
//do work to View2
} else if View3.frame.contains(pointInView) {
//do work to View3
} else if View4.frame.contains(pointInView) {
//do work to View4
} else if View5.frame.contains(pointInView) {
//do work to View5
} else if View6.frame.contains(pointInView) {
//do work to View6
}
default: break
}
}
您应该能够过滤视图数组并使用 first(where:)
函数获取第一个匹配的视图:
if let targetView = Array.first(where: {[=10=].frame.contains(pointInView)} ) {
...
}