मैन्युअल रूप से सदस्यों को कैसे अपदस्थ किया जाए


168

ऑब्जेक्टिव-सी के विपरीत, स्विफ्ट में कोई पूर्वप्रक्रमक नहीं है, इसलिए क्या अभी भी एक वर्ग के सदस्यों को मैन्युअल रूप से पदावनत करने का एक तरीका है?

मैं कुछ इसी तरह की तलाश में हूँ:

-(id)method __deprecated;

जवाबों:


266

आप उपलब्ध टैग का उपयोग कर सकते हैं, उदाहरण के लिए:

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

जहां * मंच (iOS, iOSApplicationExtension, macOS, watchOS, tvOS, * सभी के लिए, आदि) है।

तुम भी मंच है जिसमें से यह था के संस्करण निर्दिष्ट कर सकते हैं introduced, deprecated, obsoleted, renamed, और एक 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() {
    // ...
}

स्विफ्ट प्रलेखन में अधिक जानकारी ।


स्विफ्ट 3 में, =एस को :एस के साथ बदल दिया गया है ।
सैम सोफेस

2
*, deprecated: 10.0के लिए यह विरोध होगा iOS 10, tvOS 10आदि, मुझे लगता है कि हम गठबंधन नहीं करना चाहिए *एक संस्करण संख्या के साथ? कैसे बेहतर करने के लिए कोई विचार?
फैब

@fabb यह ऐप का वर्जन है, iOS का नहीं
एक्सल गुइलमिन

1
वह सत्य नहीं है। आपके द्वारा लिंक किए गए डॉक्स से: "निर्दिष्ट प्लेटफ़ॉर्म का संस्करण"
fabb

1
वास्तव में, अपने मूल बिंदु पर वापस आ रहा है: @available(*, deprecated: 10.0)इसलिए एक बहुत बुरा विचार है कि कोड केवल आईओएस पर नहीं चलना चाहिए
fabb

70

स्विफ्ट 3 और स्विफ्ट 4 को शुरू करना , संस्करण संख्या वैकल्पिक है। अब आप बस टाइप कर सकते हैं:

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

या यदि आप एक संदेश इसके साथ जाना चाहते हैं:

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

1
स्विफ्ट 2.3 के लिए, संस्करण संख्या वैकल्पिक है, भी।
डॉनसॉन्ग

3
2.3 स्विफ्ट के लिए, सिंटैक्स @available(*, deprecated, message = "no longer available ...")एक संदेश सहित जब लगता है ।
डैनियल झांग

@ डैनियल, यह अजीब है कि ऐप्पल इसका हिस्सा बदलता है, बाकी नहीं और इसे 2.3 कहते हैं। साइन करें, मैं उत्तर को फिर से अपडेट करूंगा, नोट के लिए धन्यवाद!
युकेन झोंग नोव

6

आप इसका उपयोग अपने नए फ़ंक के साथ आपके द्वारा दर्ज किए गए ऑटो-फिक्स के लिए कर सकते हैं

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

func myNewFunc() {
   // ...
}

* के बजाय आप स्विफ्ट का उपयोग कर सकते हैं, स्विफ्ट संस्करण संख्या के लिए।

पदावनत कार्य चेतावनियाँ उत्पन्न करते हैं लेकिन फिर भी कहा जा सकता है। (चेतावनी)

अप्रचलित कार्य इसे पूरी तरह से कहे जाने से रोकते हैं। (त्रुटि)

@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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.