Как вручную игнорировать участников

В отличие от Objective-C, у Swift нет препроцессора, так есть ли еще способ ручного осуждения членов класса?

Я ищу что-то похожее на это:

-(id)method __deprecated;

Ответ 1

Вы можете использовать тег 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.

Ответ 2

Запуск Swift 3 и Swift 4, номер версии является необязательным. Теперь вы можете просто ввести:

@available(*, deprecated)
func foo() {
    // ...
}

Или, если вы хотите, чтобы сообщение продолжалось:

@available(*, deprecated, message: "no longer available ...")
func foo() {
    // ...
}

Ответ 3

Вы можете использовать это, чтобы автоматически исправить ваши записи с вашей новой функцией

@available(*, deprecated, renamed: "myNewFunc")
func myOldFunc() {
   // ...
}

func myNewFunc() {
   // ...
}

Вместо * вы можете использовать swift для номера версии swift.

Устаревшие функции генерируют предупреждения, но все еще могут быть вызваны. (Предупреждение)

Устаревшие функции не дают ему быть вызванным полностью. (Ошибка)

@available(swift, deprecated: 4.0, obsoleted: 4.2, message: "This will be removed in v4.2, please migrate to ...")

или используйте другие параметры, такие как iOS, macOS, watchOS, tvOS...

Ответ 4

@available(iOS, deprecated:7.0, obsoleted: <ObsoletedVersion>, renamed: "myFuncNew", message: "Please use new method - myFuncNew()")
func myFuncOld() {
    //
}

Если deployment target 9.0 и

1. <ObsoletedVersion> == 10.0 - warning

enter image description here

2. <ObsoletedVersion> == 8.0 - compile error

enter image description here