Вопрос:
В 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/…
Не тестировал еще.