如何手动弃用成员

时间:2014-08-20 12:47:07

标签: ios objective-c swift c-preprocessor deprecated

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

我正在寻找类似的东西:

-(id)method __deprecated;

4 个答案:

答案 0 :(得分:231)

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

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

其中*是平台(iOS,iOSApplicationExtension,macOS,watchOS,tvOS,*等等)。

您还可以指定平台的版本introduceddeprecatedobsoletedrenamedmessage

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

中的更多详细信息

答案 1 :(得分:63)

启动 Swift 3 Swift 4 ,版本号是可选的。您现在只需输入:

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

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

@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

enter image description here

2。<ObsoletedVersion> == 8.0-compile error

enter image description here