如何手动弃用成员


Answers:


266

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

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

*是平台(iOS,iOSApplicationExtension,macOS,watchOS,tvOS,*适用于所有,等等)。

您还可以指定的平台,它的版本introduceddeprecatedobsoletedrenamed,和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文档


在Swift 3中,=s替换为:s。
山姆·索菲斯

2
*, deprecated: 10.0将弃用它iOS 10tvOS 10等等,我想我们不应该将其*与版本号结合使用?关于如何做得更好的任何想法?
fabb

@fabb这是应用程序的版本,而不是iOS
Axel Guilmin

1
那是不对的。从您链接的文档中:“指定平台的版本”
fabb

1
的确,回到我原来的观点:@available(*, deprecated: 10.0)因此,代码不应该仅在iOS上运行是一个非常糟糕的主意
fabb 2016年

70

Swift 3Swift 4开始,版本号是可选的。现在,您只需键入:

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

或者,如果您希望将消息与之一起发送:

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

1
对于Swift 2.3,版本号也是可选的。
DawnSong

3
对于Swift 2.3,语法似乎是@available(*, deprecated, message = "no longer available ...")在包含消息时。
张丹

@Daniel,这很奇怪,Apple更改了一部分而不是其余部分,将其称为2.3。签名,我将再次更新答案,感谢您的注意!
Yuchen Zhong

6

您可以使用此功能通过新功能自动修复您的条目

@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 ...


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

如果deployment target9.0

1. <ObsoletedVersion>== 10.0-warning

在此处输入图片说明

2. <ObsoletedVersion>== 8.0-compile error

在此处输入图片说明


在“过时”选项的情况下,不能使用它。因此,该选项未实现。bugs.swift.org/browse/SR-8168
mkjwa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.