2016-09-14 15 views
30

के बजाय 'प्रकार (का ...)' का उपयोग करें, मैंने अभी एक्सकोड 8 और आईओएस 10 (विरासत स्विफ्ट भाषा संस्करण का उपयोग करके) को अपडेट किया है।। डायनामिक टाइप को बहिष्कृत किया गया है।

भी अभी भी पुरानी स्विफ्ट सिंटैक्स का उपयोग फिर से संकलित करने के लिए अपने प्रोजेक्ट पीड़ा हो गया है की कोशिश कर रहा,। इस बार मेरे कार्यों में से एक NSBundle(forClass: self.dynamicType) का उपयोग करता है लेकिन अब प्रतीत होता है कि .dynamicType बहिष्कृत है और एक्सकोड इसे संकलित भी नहीं करना चाहता है।

उनका यह सुझाव type(of: self) उपयोग करने के लिए है, लेकिन है कि रूप में अच्छी तरह विफल रहता है। कोई भी समाधान जानता है? धन्यवाद।

+1

'NSBundle (forClass: self.dynamicType)' स्विफ्ट 2.3 में मेरे लिए ठीक संकलित, कर रहे हैं क्या आप वाकई "उपयोग विरासत स्विफ्ट भाषा संस्करण" पर सेट है "हाँ"? आप हमेशा अपने निर्माण फ़ोल्डर को साफ करने का प्रयास कर सकते हैं। – Hamish

+0

हां, यह सेट है और मैं प्रभाव देख सकता हूं क्योंकि सिंटैक्स त्रुटियों की संख्या 30 से 1 तक घट जाती है। मेरी राय यह है कि यह त्रुटि नए आईओएस 10 एसडीके में अपडेट किए गए नए यूआईकिट फ्रेमवर्क से संबंधित है, यही कारण है कि जब मैंने अपडेट किया एक्सकोड 8 यह विरासत स्विफ्ट वाक्यविन्यास को सक्रिय करने में भी दिखाई दिया। – Rodrigo

+0

कभी मेरा आखिरी बयान बात नहीं, UIKit अब भी वही – Rodrigo

उत्तर

1

@dfri जवाब के लिए पूरी तरह से काम करता है स्विफ्ट 3.

स्विफ्ट 2.3 के संबंध में, मेरा समाधान एक्सकोड (कमांड + विकल्प + शिफ्ट + के) को साफ़ करना था और ~/Library/Developer/Xcode/DerivedData में सबकुछ हटा देना था। समस्या तुरंत गायब नहीं होती है लेकिन कुछ समय बाद यह उस त्रुटि को रोकना बंद कर देगी।

शायद यह एक बग है, आखिरकार हम 8.0 में हैं। मुझे आशा है कि यह अगले रिलीज में तय हो जाएगा।

सभी को धन्यवाद।

+0

@sgonzalez से नफरत है उसका उत्तर स्विफ्ट 3 के लिए काम करता है। मैं विरासत स्विफ्ट (2) का उपयोग कर रहा था। – Rodrigo

30

(नीचे स्विफ्ट 3 के लिए रखती है; नहीं विरासत स्विफ्ट भाषा संस्करण (2.3), हालांकि, तो यह ओपी के सवाल का जवाब नहीं है, लेकिन स्विफ्ट 3 उपयोगकर्ताओं के लिए मूल्यवान हो सकता है, फिर भी)

जैसा कि आपके प्रश्न में उल्लेख किया गया है, dynamicType अब (स्विफ्ट 3) type(of:) के पक्ष में बहिष्कृत है। इसके अलावा:

  • NSBundle का नाम बदलकर Bundle कर दिया गया है।
  • Bundle की init(forClass:) प्रारंभकर्ता init(for:) को नाम दिया गया है।

खाते में इन परिवर्तनों को, स्विफ्ट 3 के लिए आप को प्रारंभ (या विशिष्ट वर्ग के साथ जुड़े एक मौजूदा उदाहरण लाने) निम्नलिखित तरीके से अपने Bundle वस्तु ले रहा है:

class Foo { 
    func bar() ->() { 
     let bundle = Bundle(for: type(of: self)) 
     // ... 
    } 
} 
+1

ओपी, उर्फ ​​स्विफ्ट 2.3 विरासत स्विफ्ट संस्करण का उपयोग कर रहा है - तो AFAIK अपने वर्तमान कोड मान्य होना चाहिए – Hamish

+0

@Hamish ओह, मैं अभी-अभी पढ़ा _ "Xcode 8 और iOS 10" _ एक्सडी धन्यवाद! – dfri

+0

कोई समस्या नहीं, मैंने पहली नज़र में ऐसा ही सोचा था! – Hamish

संबंधित मुद्दे