Swift 如何记录缩短的if条件?

Swift 如何记录缩短的if条件?,swift,sprite-kit,Swift,Sprite Kit,有人知道如何用缩写形式编写下面的代码吗 if self.atPoint(locationUser) == blueMarkArray[0] || self.atPoint(locationUser) == blueMarkArray[1] || self.atPoint(locationUser) == blueMarkArray[2] || self.atPoint(locationUser) == blueMarkArray[3] || self.atPoint(locationUser)

有人知道如何用缩写形式编写下面的代码吗

if self.atPoint(locationUser) == blueMarkArray[0] || self.atPoint(locationUser) == blueMarkArray[1] || self.atPoint(locationUser) == blueMarkArray[2] || self.atPoint(locationUser) == blueMarkArray[3] || self.atPoint(locationUser) == blueMarkArray[4] || self.atPoint(locationUser) == blueMarkArray[5] || self.atPoint(locationUser) == blueMarkArray[6]{

            print("its here")
        }
此外,我不想在blueMarkArray中指定固定数量的元素。它应该尽可能地可变,因为例如,它可以包含4个元素,但也可以包含12个元素

对于每一个答案,我都非常感激

编辑:

如果要编写以下内容,如何访问找到的元素:someNode.position=elementOfMarkArray.position

使用数组的contains方法

或者,如果您只需要检查索引6(如示例中所示),请使用

if (blueMarkArray[0...6].contains(self.atPoint(locationUser))) {
   //
}
如果要获取元素的索引,可以使用lastIndex方法的firstIndex

使用数组的contains方法

或者,如果您只需要检查索引6(如示例中所示),请使用

if (blueMarkArray[0...6].contains(self.atPoint(locationUser))) {
   //
}
如果要获取元素的索引,可以使用lastIndex方法的firstIndex

您只需使用数组的contains方法,如果数组的任何元素等于self.atPointlocationUser,该方法将返回true

如果还需要访问与正在查找的对象/值匹配的元素,可以使用firstwhere:或firstIndexof:

您只需使用数组的contains方法,如果数组的任何元素等于self.atPointlocationUser,该方法将返回true

如果还需要访问与正在查找的对象/值匹配的元素,可以使用firstwhere:或firstIndexof:

您可以使用包含以下内容的数组方法:

您可以使用包含以下内容的数组方法:



它可以工作,但是如果我想写以下内容,您如何访问找到的元素:someNode.position=elementOfMarkArray.positionSee updated answer您的第一个和第二个示例是相同的,第二个示例实际上只检查索引6。与Objective-C不同,Swift中的if语句的条件也不需要使用括号,常见的模式是不使用括号。@DávidPásztor编辑过程中出现错误,现已纠正,我仍然不太明白如何使用索引。不幸的是,它不是这样工作的:如果让index=blueMarkArray.firstIndexof:self.atPointlocationUser as!SKSpriteNode{someNode.position=index.position}它可以工作,但是如果我想写以下内容,您如何访问找到的元素:someNode.position=elementOfMarkArray.positionSee更新的答案您的第一个和第二个示例是相同的,第二个示例实际上只检查索引6。与Objective-C不同,Swift中的if语句的条件也不需要使用括号,常见的模式是不使用括号。@DávidPásztor编辑过程中出现错误,现已纠正,我仍然不太明白如何使用索引。不幸的是,它不是这样工作的:如果让index=blueMarkArray.firstIndexof:self.atPointlocationUser as!SKSpriteNode{someNode.position=index.position}这可能不是重复的,因为由于浮点精度问题,我认为您不希望以这种方式测试列表中是否有点。您可能想通过计算这些点之间的距离来测试该点是否靠近其中一个点。您补充的问题在这里得到了回答:。@MartinR我相信您将此问题标记为列表问题中的另一个发现是错误的。请投票重新打开。@trojanfoe:据我所知,OP询问如何缩短与多个数组元素的比较,或者如何找到它在数组中的位置。这一点以前已经问过,也已经回答过了最好是找到“最近的”数组元素,但这不是这里要问的。@MartinR同意OP没有正确地问这个问题;除了不知道集合类等的麻烦之外,它们似乎缺乏对2D图形的理解。这可能不是重复的,因为我认为由于浮点精度问题,您不希望以这种方式测试列表中是否有点。您可能想通过计算这些点之间的距离来测试该点是否靠近其中一个点。您补充的问题在这里得到了回答:。@MartinR我相信您将此问题标记为列表问题中的另一个发现是错误的。请投票重新打开。@trojanfoe:据我所知,OP询问如何缩短与多个数组元素的比较,或者如何找到它在数组中的位置。这一点以前已经问过,也已经回答过了最好是找到“最近的”数组元素,但这不是这里要问的。@MartinR同意OP没有正确地问这个问题;除了不知道集合类等的麻烦之外,他们似乎还缺乏对2D图形的理解。
if let index = blueMarkArray.firstIndex(of: self.atPoint(locationUser)) {
   //
}
if blueMarkArray.contains(self.atPoint(locationUser)) {
    print("it's here")
}
if let location = blueMarkArray.first(where: {$0 == self.atPoint(locationUser)}) {
    someNode.position = location.position
}
if let locationIndex = blueMarkArray.firstIndex(of: self.atPoint(locationUser)) {
   let location = blueMarkArray[locationIndex]
   someNode.position = location.position
}
if blueMarkArray.contains(self.atPoint(locationUser)) {
    print("its here")
}