2016-11-11 3 views
0


Я довольно новичок в Swift, и я узнаю, используя «App Development with Swift» -Book.
Не могли бы вы проверить код ниже - он не работает, и я не могу понять, почему.
App Development with Swift - Lesson 13 - Упражнение: «isBelow13»

import UIKit 

func isBelow13(number: Int) -> Bool { 

let isBelow: Bool = false 

    if number < 13 { 
     let isBelow = true 
    } else { 
     let isBelow = false 
    } 
    return isBelow 
} 

isBelow13(number: 11) // returns false, should return true 
isBelow13(number: 14) // returns false 


Cheerio!

+2

Если вы не можете понять, почему ваш код не работает должным образом: поместите его в * скомпилированный проект * вместо игровой площадки, а затем используйте * отладчик *. Установите контрольные точки, одношаговые, проверьте переменные , * Узнайте *, чтобы найти ошибки. –

ответ

1

Сначала вы определяете isBelow как false, а затем в своих операторах if вы определяете новую константу, называемую isBelow. Эта новая константа имеет то же имя, что и выше, но на самом деле совершенно другая. Когда вы находитесь вне своих операторов if, то, что вы создали внутри операторов if, больше не существует, и он просто возвращает тот, который вы впервые создали. Вы фактически не меняете первый isBelow, который вы первоначально устанавливаете.

То, что вы на самом деле пытаетесь сделать может быть выполнено следующим образом:

func isBelow13(number: Int) -> Bool { 

    var isBelow: Bool = false 

    if number < 13 { 
     isBelow = true 
    } else { 
     isBelow = false 
    } 
    return isBelow 
} 

isBelow13(number: 11) // returns true 
isBelow13(number: 14) // returns false 

Таким образом, вы создаете переменную, которая может быть повторно назначен «вар» вместо «пусть», а затем вы изменяя значение этой переменной на основе условия if. Затем вы возвращаете это измененное значение. Имеют смысл?

Более краткий вариант того же приведенный выше код будет выглядеть следующим образом: (С @MartinR в комментарии)

func isBelow13(number: Int) -> Bool { 
    return number < 13 
} 

Выражение number < 13 возвращает логическое значение, так что вы можете просто вернуть результат этого выражения от вашей функции.

+0

Вам не нужно предварительно назначать значение, 'let isBelow: Bool' будет достаточно здесь. - Или просто 'return number <13'. –

+0

@MartinR очень верно! Многие способы сделать одно и то же, я просто хотел максимально приблизить его к исходному коду, чтобы он был менее запутанным для OP. –

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

  • Нет связанных вопросов^_^