Результат вызова функции [myFunction] не используется.
В Obj-C распространенной практикой было использование удобных функций для выполнения общих операций, таких как настройка автоматического макета для просмотров:
func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint
{
// Make some constraint
// ...
// Return the created constraint
return NSLayoutConstraint()
}
Если вам просто нужно установить ограничение и забыть об этом, вы можете позвонить:
[view1 makeConstraint: view2]
Если вы хотите сохранить ограничение позже, чтобы вы могли его удалить или изменить, вы бы сделали что-то вроде:
NSLayoutConstraint * c;
c = [view1 makeConstraint: view2]
Я хочу сделать это быстро, но если я вызову вышеуказанную функцию и не захватить возвращаемое ограничение, я получаю предупреждение:
Result of call to 'makeConstraint(withAnotherView:)' is unused
ОЧЕНЬ раздражает. Есть ли способ сообщить Свифту, что я не всегда хочу получить возвращаемое значение?
ПРИМЕЧАНИЕ. Я знаю об этом. Это уродливо, а не то, что я ищу:
_ = view1.makeConstraint(withAnotherView: view2)
Ответы
Ответ 1
Это поведение, которое было введено в Swift 3. Вместо того, чтобы явно комментировать функции с помощью @warn_unused_result
, чтобы сообщить компилятору, что результат должен использоваться вызывающим, теперь это поведение по умолчанию.
Вы можете использовать атрибут @discardableResult
в своей функции, чтобы сообщить компилятору, что возвращаемое значение не должно "потребляться" вызывающим абонентом.
@discardableResult
func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint {
... // do things that have side effects
return NSLayoutConstraint()
}
view1.makeConstraint(view2) // No warning
let constraint = view1.makeConstraint(view2) // Works as expected
Вы можете прочитать об этом изменении более подробно в проекте эволюции.
Ответ 2
Вы можете попытаться отключить предупреждения от настроек сборки вашего проекта. Мне нравится вопрос, хорошая точка. Сделали некоторые исследования и нашли это. fooobar.com/info/64248/...
Не тестировал еще.