2016-06-18 2 views
-1

В приведенном ниже коде я смущен относительно того, где оператор return в коде возвращается? При выполнении, он работает, как ожидалось, но он вернется к:Где эта строка кода возвращается?

if userIsInTheMiddleOfTyping == true 

или не возвращает к:

if let digit = sender.currentTitle 

Ниже приводится полный кусок кода, где это применимо.

class ViewController: UIViewController { 

private var userIsInTheMiddleOfTyping = false 
private var decimalUsed = false 

@IBAction private func touchDigit(sender: UIButton) 
{ 
    if let digit = sender.currentTitle { 

     if userIsInTheMiddleOfTyping == true { 

      if digit == "." && decimalUsed == true { 
       return //where does this return to? 
      } else if digit == "." && decimalUsed == false { 
       decimalUsed = true 
      } 


      let textCurrentlyInDisplay = display.text! 
      display.text = textCurrentlyInDisplay + digit 

     } else { 
      display.text = digit 
     } 

     userIsInTheMiddleOfTyping = true 

    } 
} 
+2

Чтобы быть честным, что код не является примером хорошего кода. Это ужасно. Никогда не сравнивать с булеанами явно. Кроме того, нет необходимости в переменной decimalUsed. Вы можете проверить это динамически, проверив текущий текст. Код также можно было бы упростить, используя предложения 'guard'. – Sulthan

+1

С уважением, как вы можете не знать, куда он возвращается? Если бы были закрыты или что-то еще, я бы понял небольшую неопределенность, но это простая старая функция с простым старым «возвратом». Пожалуйста, снова прочитайте свои учебники (ы) о том, что означает 'return'. – luk2302

+0

Спасибо @Sulthan! Я обязательно буду учитывать ваши комментарии. Я все еще изучаю веревки. :) –

ответ

3

return всегда возвращается из функции, так как в этом случае он возвращается к строке кода, который вызывает touchDigit(...)

В основном здесь, то return просто останавливает выполнение функции touchDigit.

(Это означает, что ни один из кода, следующего за return будет работать)

+0

Возможно, вам захочется уточнить, что он останавливает выполнение функции touchDigit и что все после этого возврата не будет запущено. – Ike10

+0

@ Ike10 По-моему, «прекращение исполнения» уже подразумевает, что после этого ничего не будет, но я добавил его в любом случае :) – Keiwan

2

return просто останавливает код. Вы можете поместить его в функции, если хотите. Например:

Если я хочу продолжить выполнение некоторого кода только в том случае, если определенный оператор является истинным, то вы можете return функцию, чтобы остановить его, если он является ложным.

func something(a: Int, b: Int) { 
    if a != b { 
     return//Stops the code 
    } 
    //Some more code -- if a is not equal to b, this will not be called 
} 

Помните, что это работает только с функциями void. Он может работать и с другими, но это немного отличается. Вы должны вернуть что-то вместе с ним. Другой пример:

func somethingElse(a: Int, b: Int) -> Bool{ 
    if a != b { 
     return false //stops the code, but also returns a value 
    } 
    return true //Will only get called if a == b 
} 

В этой функции, она возвращает Boolean. Если a! = B, то записывается return false, потому что это возвращает false, а также останавливает код.

Более подробную информацию о доходности, вы можете посетить Apple's documentation on functions.

Смежные вопросы