отсутствует возврат в функции, которая, как ожидается, вернет 'Double'Что делать? - PullRequest
0 голосов
/ 19 марта 2019

Следующий код:

protocol ExampleProtocol {
    var simpleDescription: String { get }
    var absoluteValue: Double { get }
    mutating func adjust()
}

extension Double: ExampleProtocol {
    var simpleDescription: String {
        return "The number \(self)"
    }
    var absoluteValue: Double {
        if self < 0 {
            return self * -1
        } else if self > 0 {
            return self
        }
    }
    mutating func adjust() {
        self += 42
    }
}

При попытке выполнить его с помощью simpleDescription или absoluteValue (например, print (10.simpleDescription), я просто получаю эту ошибку:

отсутствуетreturn в функции, которая, как ожидается, вернет 'Double'

Функция "absoluteValue" возвращает сама себя, поэтому значение Double, так почему же оно говорит, что отсутствует один?

1 Ответ

1 голос
/ 19 марта 2019

Проблема в том, что в вашем операторе if отсутствует блок else, возвращаемое значение не определено для случая, когда self == 0. Вы можете просто изменить ветку else if на else, потому что вы также хотите вернуть self для 0.

var absoluteValue: Double {
    if self < 0 {
        return self * -1
    } else {
        return self
    }
}

Вы также можете написать это как однонаправленный, используя троичный оператор:

var absoluteValue: Double {
    return self < 0 ? self * -1 : self
}
...