Home > Mobile >  swift: about ternary operator Question. Why my code is error code??? Please tell me why I'm wro
swift: about ternary operator Question. Why my code is error code??? Please tell me why I'm wro

Time:04-22

swift: about ternary operator Question. Why my code is error code??? Please tell me why I'm wrong.


var arr = [0,1,2,3,4,5,6,7,8]

var result = 0;

for a in 0..<arr.count{
    for b in 1..<arr.count - 1{
        for c in 2..<arr.count - 2 {
            arr[a]   arr[b]   arr[c] <= input[1] ? result = arr[a]   arr[b]  arr[c] : continue
        }
    }
}

[this is my error] [1]: https://i.stack.imgur.com/UdiUB.png

CodePudding user response:

In Swift, the ternary condition operator is an expression which takes the form

<condition> ? <expression if true> : <expression if false>

Expressions are part of larger statements, and the ternary specifically is one which evaluates to either the expression after the ?, or the one after the : depending on the truth of the condition.

continue, however, is not an expression but a statement on its own, which means that it cannot be on either side of the ternary.

Thinking about this another way: expressions evaluate to some value (e.g., can be put on the right-hand-side of an assignment, like x = <some expression>), while statements do not (e.g., it doesn't make sense to write x = continue).

You will need to express this in the form of a regular if-statement then:

if arr[a]   arr[b]   arr[c] <= input[1] {
    result = arr[a]   arr[b]  arr[c]
} else {
    continue
}

Note that the above code might be grammatically correct (in that it will compile), but it is unlikely to be what you mean: the loop will automatically continue at the end of execution even if arr[a] arr[b] arr[c] <= input[1] by default, which means that your result may get overwritten later in the loop. It seems likely that you mean something like

outer_loop: for a in 0 ..< arr.count {
    for b in 1 ..< arr.count - 1 {
        for c in 2 ..< arr.count - 2 {
            if arr[a]   arr[b]   arr[c] <= input[1] {
                result = arr[a]   arr[b]   arr[c]

                // `break` would only exit the `c` loop, but with this label
                // we can exit all loops at once.
                break outer_loop
            }
        }
    }
}
  • Related