Üyeleri el ile kullanma


168

Objective-C'nin aksine, Swift'in önişlemcisi yoktur, bu yüzden bir sınıfın üyelerini manuel olarak kullanımdan kaldırmanın bir yolu var mı?

Buna benzer bir şey arıyorum:

-(id)method __deprecated;

Yanıtlar:


267

Kullanılabilir etiketini kullanabilirsiniz, örneğin:

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

Platform * nerede (iOS, iOSApplicationExtension, macOS, watchOS, tvOS, * herkes için).

Ayrıca öyleydi ettiği platforma sürümünü belirtebilirsiniz introduced, deprecated, obsoleted, renamed, ve 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
}

Projeniz birden çok platformu hedefliyorsa, aşağıdakiler gibi birkaç etiket kullanabilirsiniz:

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

Swift belgelerinde daha fazla ayrıntı .


Swift 3'te =s , s ile değiştirilir :.
Sam Soffes

2
*, deprecated: 10.0iOS 10, tvOS 10vb. için kullanımdan kaldırılacak sanırım *bir sürüm numarası ile birleştirmemeliyiz ? Nasıl daha iyi yapılacağı hakkında bir fikrin var mı?
fabb

@fabb iOS değil uygulamanın versiyonu
Axel Guilmin

1
Bu doğru değil.
Bağladığınız

1
Tam olarak, orijinal @available(*, deprecated: 10.0)
noktama

70

Swift 3 ve Swift 4'ten başlayarak sürüm numarası isteğe bağlıdır. Şimdi şunu yazabilirsiniz:

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

Veya bir mesajla birlikte gitmek istiyorsanız:

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

1
Swift 2.3 için sürüm numarası da isteğe bağlıdır.
DawnSong

3
Swift 2.3 için, sözdizimi @available(*, deprecated, message = "no longer available ...")bir ileti eklerken görünmektedir .
Daniel Zhang

@Daniel, Apple'ın geri kalanını değil bir kısmını değiştirmesi ve çağırması garip 2.3. İmza, cevabı tekrar güncelleyeceğim, not için teşekkürler!
Yuchen Zhong

6

Bunu, yeni işlevinizle girişinizi otomatik olarak düzeltmek için kullanabilirsiniz

@available(*, deprecated, renamed: "myNewFunc")
func myOldFunc() {
   // ...
}

func myNewFunc() {
   // ...
}

* Yerine swift Sürüm numarası için swift kullanabilirsiniz.

Kullanımdan kaldırılmış işlevler uyarı oluşturur ancak yine de çağrılabilir. (Uyarı)

Eski işlevler tamamen çağrılmasını engeller. (Hata)

@available(swift, deprecated: 4.0, obsoleted: 4.2, message: "This will be removed in v4.2, please migrate to ...")

veya iOS, macOS, watchOS, tvOS gibi diğer Seçenekleri kullanın ...


1
@available(iOS, deprecated:7.0, obsoleted: <ObsoletedVersion>, renamed: "myFuncNew", message: "Please use new method - myFuncNew()")
func myFuncOld() {
    //
}

Eğer deployment targetbir 9.0ve

1. <ObsoletedVersion>== 10.0-warning

resim açıklamasını buraya girin

2. <ObsoletedVersion>== 8.0-compile error

resim açıklamasını buraya girin


"Eskimiş" seçeneği olması durumunda kullanamazsınız. Buna göre, seçenek uygulanmadı. bugs.swift.org/browse/SR-8168
mkjwa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.