Как предупредить вызывающего абонента о функционале в Swift - PullRequest
4 голосов
/ 31 октября 2019

Я рефакторинг большого iOS Swift проекта постепенно. Некоторые функции должны быть переименованы, и я не могу переименовать напрямую, потому что многие другие модули вызывают их напрямую. Вместо этого для первого этапа выпуска я хочу сообщить вызывающей функции, что, пожалуйста, используйте эту функцию вместо этой. Позвольте мне объяснить с примером,

fun length() - > Int {
    //..... some logic
}

Ожидается рефакторинг его в следующей версии,

fun count() - > Int {
    //..... same logic
}

Для 1-й фазы я хочу оставить и length() и count()но пусть другие разработчики будут предупреждены, чтобы они не использовали существующий, то есть length (). Поэтому я попытался с,

fun length() - > Int {
    #warning("Please use count() instead")
    //..... some logic
}

Но предупреждение выдается в строке, но не для вызывающего. Итак, каков наилучший способ сообщить вызывающему абоненту о неправильном вызове?

Примечание. Приведенный здесь пример представляет собой простейшую форму для понимания проблемы. Реальная реализация намного шире по объему и размеру модуля.

Ответы [ 2 ]

6 голосов
/ 31 октября 2019

Вы можете управлять доступностью метода с помощью ключевого слова @available.

Для предупреждения для пользователя:

@available(*, deprecated, message: "Please use count() instead")
func length() - > Int { }

Для принудительное действие пользователь:

@available(*, unavailable, message: "Please use count() instead")
func length() - > Int { }

Кому предложить пользователю переименовать функцию:

@available(*, renamed: "count()")
func length() - > Int { }

Также вы можете установить платформу и версию устаревания, если вам нужнодо (даже без сообщения):

@available(iOS, deprecated:11.2)
func length() - > Int { }
4 голосов
/ 31 октября 2019

Используйте ключевое слово available

. Вы можете использовать его несколькими способами: если вы хотите показать предупреждение разработчику, вам следует использовать deprecated, однако, если вы хотите их форсироватьзатем используйте unavailable

@available(*, deprecated, message: "Please use count() instead")
func length() - > Int {
}

Более подробную информацию можно получить по адресу HackingWithSwift

...