Search code examples
iosobjective-cswiftc-preprocessordeprecated

How to manually deprecate members


Unlike Objective-C, Swift has no preprocessor, so is there still a way to manually deprecate members of a class?

I am looking for something similar to this:

-(id)method __deprecated;

Solution

  • You can use the Available tag, for example :

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

    Where * is the platform (iOS, iOSApplicationExtension, macOS, watchOS, tvOS, * for all, etc.).

    You can also specify the version of the platform from which it was introduced, deprecated, obsoleted, renamed, and a 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
    }
    

    If your project targets multiple platforms, you can use several tags like so :

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

    More details in the Swift documentation.