如何手动弃用成员

Ato*_*mix 153 objective-c deprecated ios c-preprocessor swift

与Objective-C不同,Swift没有预处理器,那么还有办法手动弃用类的成员吗?

我正在寻找类似的东西:

-(id)method __deprecated;
Run Code Online (Sandbox Code Playgroud)

Axe*_*min 248

您可以使用Available标记,例如:

@available(*, deprecated)
func myFunc() { 
    // ...
}
Run Code Online (Sandbox Code Playgroud)

其中*是平台(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
}
Run Code Online (Sandbox Code Playgroud)

如果您的项目面向多个平台,则可以使用多个标记,如下所示:

@available(tvOS, deprecated:9.0.1)
@available(iOS, deprecated:9.1)
@available(macOS, unavailable, message: "Unavailable on macOS")
func myFunc() {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

Swift文档中的更多细节.

  • `*, deprecated: 10.0` 将在 `iOS 10`、`tvOS 10` 等中弃用它,我想我们不应该将 `*` 与版本号结合起来吗?关于如何做得更好的任何想法? (2认同)

Yuc*_*ong 64

启动Swift 3Swift 4,版本号是可选的.你现在可以简单地输入:

@available(*, deprecated)
func foo() {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

或者如果你想要一条消息:

@available(*, deprecated, message: "no longer available ...")
func foo() {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 对于Swift 2.3,在包含消息时,语法似乎是"@available(*,deprecated,message ="不再可用......")`. (3认同)

Sky*_*org 6

您可以使用它来自动修复您的新功能条目

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

func myNewFunc() {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

您可以使用 swift 代替 * 来获取 swift 版本号。

不推荐使用的函数会生成警告,但仍然可以调用。(警告)

过时的函数阻止它被完全调用。(错误)

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

或使用其他选项,如 iOS、macOS、watchOS、tvOS ...