swift – 确定范围是否包含值

前端之家收集整理的这篇文章主要介绍了swift – 确定范围是否包含值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图找出一种方法来确定一个值是否在Swift范围内。

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

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

据我所知,没有任何内在的方式来做我上面想象的.contains方法

所以我试图扩展Range类。我终于遇到了泛型的问题。我无法扩展范​​围< Int>所以我不得不尝试扩展Range本身。

最接近的是这个,但是它不起作用,因为> =和< =不是为ForwardIndex定义的

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

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

Edit2:这似乎可以扩展Range

  1. extension Range {
  2. func contains(val:T) -> Bool {
  3. for x in self {
  4. if(x == val) {
  5. return true
  6. }
  7. }
  8.  
  9. return false
  10. }
  11. }
  12.  
  13. var a = 0..5
  14. a.contains(3) // true
  15. a.contains(6) // false
  16. a.contains(-5) // false

我对下面提到的〜=运算符非常感兴趣现在看看。

你可以使用〜=操作符:
  1. let point = (1,y) where (0..5) ~= x:
  2. println("(\(x),\(y)) has an x val between 0 and 5.")
  3. default:
  4. println("This point has an x val outside 0 and 5.")
  5. }

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

  1. let point = (1,-1)
  2. let (x,y) = point
  3. switch x {
  4. case 0..5:
  5. println("yes")
  6. default:
  7. println("no")
  8. }

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

猜你在找的Swift相关文章