В отличие от Objective-C, Swift не имеет препроцессора, поэтому есть ли способ вручную исключать членов класса?
Я ищу что-то похожее на это:
-(id)method __deprecated;
В отличие от Objective-C, Swift не имеет препроцессора, поэтому есть ли способ вручную исключать членов класса?
Я ищу что-то похожее на это:
-(id)method __deprecated;
Вы можете использовать тег Available, например:
@available(*, deprecated)
func myFunc() {
// ...
}
Где * - платформа (iOS, iOSApplicationExtension, macOS, watchOS, tvOS, * для всех и т. Д.).
Вы можете также указать версию платформы , с которой он был introduced
, deprecated
, obsoleted
, renamed
, а также message
:
@available(iOS, deprecated:6.0)
func myFunc() {
// calling this function is deprecated on iOS6+
}
Or
@available(iOS, deprecated: 6.0, obsoleted: 7.0, message: "Because !")
func myFunc() {
// deprecated from iOS6, and obsoleted after iOS7, the message "Because !" is displayed in XCode warnings
}
Если ваш проект ориентирован на несколько платформ, вы можете использовать несколько тегов, например:
@available(tvOS, deprecated:9.0.1)
@available(iOS, deprecated:9.1)
@available(macOS, unavailable, message: "Unavailable on macOS")
func myFunc() {
// ...
}
Более подробная информация в документации Swift .
=
s заменяются на:
s.*, deprecated: 10.0
не рекомендуется использовать егоiOS 10
иtvOS 10
т. д., я полагаю, мы не должны объединяться*
с номером версии? Есть идеи, как это сделать лучше?@available(*, deprecated: 10.0)
поэтому это очень плохая идея, если код работает не только на iOSНачиная с Swift 3 и Swift 4 , номер версии не обязателен. Теперь вы можете просто набрать:
Или, если вы хотите сообщение, согласитесь с ним:
источник
@available(*, deprecated, message = "no longer available ...")
при включении сообщения.Вы можете использовать это, чтобы автоматически исправить ваши записи с вашей новой функцией
Вместо * вы можете использовать swift для номера версии swift.
Устаревшие функции генерируют предупреждения, но все еще могут быть вызваны. (Предупреждение)
Устаревшие функции не дают ему быть вызванным полностью. (Ошибка)
или используйте другие опции, такие как iOS, macOS, watchOS, tvOS ...
источник
Если
deployment target
есть9.0
и1.
<ObsoletedVersion>
==10.0
-warning
2.
<ObsoletedVersion>
==8.0
-compile error
источник