加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 确定范围是否包含值

发布时间:2020-12-14 05:53:37 所属栏目:百科 来源:网络整理
导读:我试图找出一种方法来确定一个值是否在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
我试图找出一种方法来确定一个值是否在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类。我终于遇到了泛型的问题。我无法扩展范??围< 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,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.")
}

您也可以直接在交换机中进行操作:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读