Результат вызова функции [myFunction] не используется.

Вопрос:В Obj-C распространенной практикой было использование удобных функций для выполнения общих операций, таких как настройка автоматического макета для просмотров: func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint { // Make some constraint // ... // Return the created constraint return NSLayoutConstraint() } Если вам просто нужно установить ограничение и забыть об этом, вы можете позвонить: [view1 makeConstraint:

Вопрос:

В 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) Лучший ответ:

Это поведение, которое было введено в 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

Вы можете прочитать об этом изменении более подробно в проекте эволюции.

Ответ №1

Вы можете попытаться отключить предупреждения от настроек сборки вашего проекта. Мне нравится вопрос, хорошая точка. Сделали некоторые исследования и нашли это. qaru.site/questions/64248/…

Не тестировал еще.

Оцените статью
Добавить комментарий