gpt4 book ai didi

swift - 确定 Range 是否包含值

转载 作者:IT王子 更新时间:2023-10-29 05:07:47 24 4
gpt4 key购买 nike

我想找出一种方法来确定一个值是否在 Range 范围内在 Swift 中。

基本上我想要做的是改编一个 switch 语句示例来做这样的事情:

let point = (1, -1)
switch point {
case let (x, y) where (0..5).contains(x):
println("(\(x), \(y)) has an x val between 0 and 5.")
default:
println("This point has an x val outside 0 and 5.")
}

据我所知,没有任何内置方法可以完成我想象中的 .contains上面的方法。

所以我尝试扩展 Range类(class)。不过,我最终遇到了泛型问题。我无法扩展 Range<Int>所以我不得不尝试扩展 Range本身。

我得到的最接近的是这个,但自 >= 以来它不起作用和 <=没有为 ForwardIndex 定义

extension Range {
func contains(val:ForwardIndex) -> Bool {
return val >= self.startIndex && val <= self.endIndex
}
}

我将如何添加 .contains Range 的方法?或者有没有更好的方法来确定一个值是否在一个范围内?

Edit2:这似乎可以扩展 Range

extension Range {
func contains(val:T) -> Bool {
for x in self {
if(x == val) {
return true
}
}

return false
}
}

var a = 0..5
a.contains(3) // true
a.contains(6) // false
a.contains(-5) // false

不过,我对下面提到的 ~= 运算符非常感兴趣;现在正在调查。

最佳答案

您可以使用 ~= 运算符:

let point = (1, -1)
switch point {
case let (x, y) where (0..5) ~= x:
println("(\(x), \(y)) has an x val between 0 and 5.")
default:
println("This point has an x val outside 0 and 5.")
}

你也可以直接在一个switch中做:

let point = (1, -1)
let (x, y) = point
switch x {
case 0..5:
println("yes")
default:
println("no")
}

~= 是 case 语句使用的模式匹配运算符。查看详情 in the docs .

关于swift - 确定 Range 是否包含值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com