我们将我们的库提供给客户,我想将一些方法标记为"已弃用",因为我们更改了它们(就像Apple在iPhone SDK中所做的那样).
我已经看到了__OSX_AVAILABLE_BUT_DEPRECATED映射到的预处理器宏__AVAILABILITY_INTERNAL,它被映射到__attribute__((deprecated))......
好吧,我对这些东西有点困惑!
有谁知道这件事?
这是我假设的一个非常简单的问题.有人可以告诉我部署目标的含义.如果我选择IOS 10,这是否意味着只有拥有iOS 10的用户才能下载该应用.选择较低的部署目标是不是很糟糕?另外,继续部署目标,不建议在较低的部署目标上运行.
想象一下,我在Swift中标记了以下方法:
@available(*, deprecated=1.0)
func myFunc() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我通过设置将警告视为Swift中的错误OTHER_SWIFT_FLAGS="-warnings-as-errors".
如何将这些弃用通知显示为警告,同时仍将其余警告视为错误?
看起来GCC对这个问题有一个很好的解决方案:
-Werror // treat all warnings as errors
-Wno-error=<warning> // don't treat <warning> as error (e.g. -Wno-error=switch)
-Werror=<warning> // treat <warning> as error
Run Code Online (Sandbox Code Playgroud)
所以如果这是Objective-C,我可以简单地使用-Werror -Wno-error=deprecated-declarations并获得我想要的东西.
什么是Swift的等价物?
我尝试添加-Wno-error=deprecated-declarations到OTHER_SWIFT_FLAGS,但似乎它不适用于Swift,所以它不起作用.
在Objective-C中,我们可以将某些方法标记为NS_UNAVAILABLE,这意味着如果尝试调用它们,我们将获得编译器级错误.当子类想要减少它继承的超类的api的范围时,这可能很有用.例如,新的UIView子类可能希望强制它必须通过nib创建,因此可能将initWithFrame标记为不可用.
Swift有@available标记,但有一种简单的方法来标记一个方法是不可用的,类似于Objective-C中的NS_UNAVAILABLE?