Какой самый простой способ в swift использовать необязательный параметр функции, когда nil должен возвращать определенное значение по умолчанию? - PullRequest
0 голосов
/ 18 октября 2018

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

Есть ли более короткий / понятный способ кодирования этого примера?

func iTake(aNonOptional nonOptionalInt: Int) -> Float {
    // do something with nonOptionalInt
    return Float(nonOptionalInt) * 0.125
}

var anOptionalInt: Int?
let aSpecificDefaultReturnValue: Float = 0.99

let result: Float
if let aNonOptionalInt = anOptionalInt {
    result = iTake(aNonOptional: aNonOptionalInt)
} else {
    result = aSpecificDefaultReturnValue
}

Мой реальный вариант использования более сложный, но это идея.

Функция не может быть переписана, но можно ли написать if let лучше?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вы также можете сделать это следующим образом:

let result: Float = (anOptionalInt != nil) ? iTake(aNonOptional: anOptionalInt!) : aSpecificDefaultReturnValue

Если anOptionalInt не равно nil, функция iTake вызывается в качестве аргумента с использованием развернутого значения переменной anOptionalInt (принудительное развертывание здесьхорошо, так как мы уже проверили, является ли это нулем или нет).Если значение равно nil, оставьте значение по умолчанию в качестве результата.

0 голосов
/ 18 октября 2018
var anOptionalInt: Int?
let aSpecificDefaultReturnValue: Float = 0.99
let result = anOptionalInt.map { iTake(aNonOptional: $0) } ?? aSpecificDefaultReturnValue

Вы можете использовать тот факт, что перечисление Swift Optional имеет функцию map, и связать его с оператором объединения nil:

  • Optional.map заглядывает внутрь вашего дополнительного'box' и (если он находит что-то в коробке) использует предоставленное вами преобразование, чтобы изменить ваше значение, или игнорирует преобразование, если у вас ничего нет внутри поля (т. е. nil).
  • Нольоператор слияния ?? в основном говорит: «верни все, что осталось от меня, если это не ноль, в противном случае верни все правильно от меня».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...