メンバーを手動で廃止する方法


168

Objective-Cとは異なり、Swiftにはプリプロセッサがないため、クラスのメンバーを手動で非推奨にする方法はまだありますか?

私はこれに似たものを探しています:

-(id)method __deprecated;

回答:


266

たとえば、Availableタグを使用できます。

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

ここで*はプラットフォームです(iOS、iOSApplicationExtension、macOS、watchOS、tvOS、* for allなど)。

また、それがあったから、プラットフォームのバージョンを指定することができ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に置き換えられ:ます。
Sam Soffes 2016年

2
*, deprecated: 10.0以下のためにそれを廃止しますiOS 10tvOS 10など、私たちは結合するべきではないと思います*バージョン番号と?それをより良くする方法についてのアイデアはありますか?
2016年

@fabbこれは、iOSではなく、アプリのバージョンです
Axel Guilmin

1
それは真実ではありません。リンクしたドキュメントから:「指定されたプラットフォームのバージョン」
fabb

1
正確に、私の元のポイントに戻ります。@available(*, deprecated: 10.0)したがって、コードがiOSでのみ実行されない場合は非常に悪い考えです
fabb

70

開始スウィフト3スウィフト4、バージョン番号はオプションです。次のように入力するだけです。

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

または、メッセージが必要な場合は、それに合わせてください。

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

1
Swift 2.3の場合、バージョン番号もオプションです。
DawnSong 2016年

3
Swift 2.3の@available(*, deprecated, message = "no longer available ...")場合、メッセージを含める場合の構文のようです。
Daniel Zhang

@Daniel、それはAppleが残りの部分ではなくその一部を変更し、それを2.3と呼ぶのは奇妙だ。サイン、メモをありがとう、答えをもう一度更新します!
Yuchen Zhong 2016

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 targetです9.0と、

1. <ObsoletedVersion>== 10.0-warning

ここに画像の説明を入力してください

2. <ObsoletedVersion>== 8.0-compile error

ここに画像の説明を入力してください


「廃止」オプションの場合は使用できません。これによると、オプションは実装されていません。bugs.swift.org/browse/SR-8168
mkjwa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.