Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 当整数在swift中的某个范围内时,是否可以执行for循环?_For Loop_Swift_Range - Fatal编程技术网

For loop 当整数在swift中的某个范围内时,是否可以执行for循环?

For loop 当整数在swift中的某个范围内时,是否可以执行for循环?,for-loop,swift,range,For Loop,Swift,Range,当整数在swift中的某个范围内时,是否可以执行常规for循环 这就是我想要实现的目标: func someFunc(var plusOrMinus:Int) { for var i:Int = 0; i == -8...8;i += plusOrMinus { } } 或: 或: func someFunc(变量plusor减号:Int){ 对于变量i:Int=0;i==;i+=加减{ } } 这些都不管用。希望你能理解这个问题,并能帮助我。:) 要检查Int是否在范围-8…

当整数在swift中的某个范围内时,是否可以执行常规for循环

这就是我想要实现的目标:

func someFunc(var plusOrMinus:Int) {

    for var i:Int = 0; i == -8...8;i += plusOrMinus {

 }
}
或:

或:

func someFunc(变量plusor减号:Int){
对于变量i:Int=0;i==;i+=加减{
}
}

这些都不管用。希望你能理解这个问题,并能帮助我。:)

要检查
Int
是否在范围
-8…8
内,只需使用条件检查范围的两端,并将其与
&
组合即可:

func someFunc(var plusOrMinus:Int) {

    for var i = 0; i >= -8 && i <= 8; i += plusOrMinus {
        println(i) 
    }
}

如果您想在…而不是C型循环中使用,您可以使用
跨步
,但请检查您要进入的方向,以确定是否需要小于或大于初始值的目标:

func someFunc(plusOrMinus: Int) {
    precondition(plusOrMinus != 0)
    let target = plusOrMinus > 0 ? 8 : -8

    for i in stride(from: 0, through: target, by: plusOrMinus) {
        println(i)
    }
}
您选择的
-8…8
范围是可能的,但您必须明确创建一个闭合区间,然后检查计数器是否在该区间内:

func someFunc(plusOrMinus: Int) {
    let interval = -8...8 as ClosedInterval
    for var i = 0; interval.contains(i); i += plusOrMinus {
        println(i)
    }
}

哈哈,谢谢你,我以前没有使用=in=来做这个,但那不起作用。。。当然我现在明白为什么了:DUsing
~=
Range
应该和
&
一样有效,因为它会导致
..
返回
ClosedInterval
,但它有点滥用
~=/code>IMO,最好显式地创建
ClosedInterval
。与-8…8中的
i
等效的Swift将是带有范围的模式匹配运算符,compare。这实际上不是模式匹配或范围的适当使用。ClosedInterval是这里所需要的(或stride),请参见下面我的答案。啊,是的,这更好–尽管您依赖于优化器,从而消除了为循环的每个迭代创建多个
ClosedInterval
func someFunc(var plusOrMinus:Int) {

    for var i = 0; -8...8 ~= i; i += plusOrMinus {
        println(i)
    }
}
func someFunc(plusOrMinus: Int) {
    precondition(plusOrMinus != 0)
    let target = plusOrMinus > 0 ? 8 : -8

    for i in stride(from: 0, through: target, by: plusOrMinus) {
        println(i)
    }
}
func someFunc(plusOrMinus: Int) {
    let interval = -8...8 as ClosedInterval
    for var i = 0; interval.contains(i); i += plusOrMinus {
        println(i)
    }
}