How to deprecate a method in Xcode

前端 未结 5 2025
抹茶落季
抹茶落季 2020-12-07 12:08

We have our library we ship to our customers, and I\'d like to mark some methods as \"deprecated\" because we changed them (like Apple does in the iPhone SDK).

I\'ve

相关标签:
5条回答
  • 2020-12-07 12:31

    - FOR SWIFT CODE:

    Put this right above the method: @available(*, deprecated: <#Version#>, message: <#Message#>)

    example:

    @available(*, deprecated: 11, message: "Use color assets instead")
    public struct ColorPaletteItemResource: ColorPaletteItemResourceType {
        ...
    }
    
    0 讨论(0)
  • 2020-12-07 12:32

    Swift 5.0

    Deprecate any method/class/struct/protocols using @available

    @available(*, deprecated, message: "Parse your data by hand instead")
    func parseData() { }
    
    @available(*, deprecated, renamed: "loadData")
    func fetchData() { }
    
    @available(swift, obsoleted: 4.1, renamed: "attemptConnection")
    func testConnection() { }
    
    @available(swift, deprecated: 4.0, obsoleted: 5.0, message: "This will be removed in v5.0; please migrate to a different API.")
    

    Possible params:

    • introduced
    • deprecated
    • obsoleted
    • message
    • renamed

    For more info see apple doc: Attributes

    0 讨论(0)
  • 2020-12-07 12:33

    __attribute__((deprecated)) is the gcc way (also supported in clang) of marking a function / method as deprecated. When one is marked as "deprecated", a warning will be produced whenever anyone calls it.

    The syntax for normal functions would be

    __attribute__((deprecated))
    void f(...) {
      ...
    }
    
    // gcc 4.5+ / clang
    __attribute__((deprecated("g has been deprecated please use g2 instead")))
    void g(...) {
      ...
    }
    

    and that of Objective-C methods would be

    @interface MyClass : NSObject { ... }
    -(void)f:(id)x __attribute__((deprecated));
    ...
    @end
    

    You can also mark the whole class as deprecated with

    __attribute__((deprecated))
    @interface DeprecatedClass : NSObject { ... }
    ...
    @end
    

    Apple also provides the <AvailabilityMacros.h> header which provides the DEPRECATED_ATTRIBUTE and DEPRECATED_MSG_ATTRIBUTE(msg) macros that expand to the above attributes, or nothing if the compiler doesn't support attributes. Note that this header doesn't exist outside of OS X / iOS.


    Side note, if you are using Swift you use the @available attribute to deprecate an item, e.g.

    @available(*, deprecated=2.0, message="no longer needed")
    func f() {
        ...
    }
    
    0 讨论(0)
  • 2020-12-07 12:40

    You can also use more readable define DEPRECATED_ATTRIBUTE

    It defined in usr/include/AvailabilityMacros.h:

    #define DEPRECATED_ATTRIBUTE        __attribute__((deprecated))
    #define DEPRECATED_MSG_ATTRIBUTE(msg) __attribute((deprecated((msg))))
    

    Objective-C methods example:

    @interface MyClass : NSObject { ... }
    -(void)foo:(id)x DEPRECATED_ATTRIBUTE;
    
    // If you want to specify deprecated message:
    -(void)bar:(id)x DEPRECATED_MSG_ATTRIBUTE("Use baz: method instead.");
    ...
    @end
    

    You can also mark the whole class as deprecated:

    DEPRECATED_ATTRIBUTE
    @interface DeprecatedClass : NSObject { ... }
    ...
    @end
    
    0 讨论(0)
  • 2020-12-07 12:51

    If you are using C++14 in your xcode project, you may also use the [[deprecated]] or [[deprecated("reason")]] attribute that is now part of the language.

    see documentation: http://en.cppreference.com/w/cpp/language/attributes

    0 讨论(0)
提交回复
热议问题