2016-03-23 7 views
12

का उपयोग हटाई गई है, मैं निम्नलिखित कोड है:प्रयोग करें '#selector' के बजाय

func setupShortcutItems(launchOptions: [NSObject: AnyObject]?) -> Bool { 
    var shouldPerformAdditionalDelegateHandling: Bool = false 

    if (UIApplicationShortcutItem.respondsToSelector("new")) { 
     self.configDynamicShortcutItems() 

     // If a shortcut was launched, display its information and take the appropriate action 
     if let shortcutItem: UIApplicationShortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem { 
      // When the app launched at the first time, this block can not called. 
      self.handleShortCutItem(shortcutItem) 

      // This will block "performActionForShortcutItem:completionHandler" from being called. 
      shouldPerformAdditionalDelegateHandling = false 
     } else { 
      // normal app launch process without quick action 
      self.launchWithoutQuickAction() 
     } 
    } else { 
     // Less than iOS9 or later 
     self.launchWithoutQuickAction() 
    } 

    return shouldPerformAdditionalDelegateHandling 
} 

मैं निम्नलिखित UIApplicationShortcutItem.respondsToSelector("new") पर "चेतावनी", जो कहते हैं मिलती है:

स्ट्रिंग ऑब्जेक्टिव-सी चयनकर्ताओं के लिए शाब्दिक की

उपयोग हटाई गई है, उपयोग '#selector' के बजाय

चेतावनी के साथ स्वचालित रूप से कोड की जगह:

UIApplicationShortcutItem.respondsToSelector(#selector(FBSDKAccessToken.new))

हालांकि इस संकलन नहीं है क्योंकि new() unavailabe है। इस मामले में मुझे क्या उपयोग करना चाहिए?

+0

इसे जांचें ... आपको कुछ मिल सकता है http://stackoverflow.com/questions/36147831/syntax-selector-swift-2-2 –

+0

आप चयनकर्ता 'नया' के लिए क्यों परीक्षण कर रहे हैं? मुझे कोई नया कोड नहीं दिखाई देता है जो यहां 'नया' संदेश भेजता है। –

उत्तर

16

Xcode 7.3:

तो फिर तुम अभिव्यक्ति जोड़ सकते हैं जहाँ आप चयनकर्ता का उपयोग करना चाहते कोड की पंक्ति:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(InterfaceController.updateResult(_:)), name: "updateResult", object: nil) 
01:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateResult:", name: "updateResult", object: nil) 

अब आप कोड की इस पंक्ति का उपयोग करना चाहिए

कम से कम यह है कि कोड में कुछ वर्णों के चारों ओर बदलने के बाद एक्सकोड ने मुझे यह पेशकश की। ऐसा लगता है कि जब आप इस त्रुटि के साथ प्रस्तुत होते हैं तो यह हमेशा सही समाधान प्रदान नहीं करता है।

+1

यह मेरे लिए चयनित उत्तर से बेहतर काम करता है। – ded

+1

उपरोक्त - यह सही है! –

+0

'button.addTarget (स्वयं, क्रिया: # चयनकर्ता (ViewController.onClickStart), .touchUpInside के लिए) 'मैं इसका उपयोग करता हूं। धन्यवाद ! @ फ्लोरियन उहेलेमैन –

1

इस विशेष respondsToSelector स्थिति है, जहां आप जिसके साथ एक समारोह संदर्भ संबद्ध करने के लिए कोई मौजूदा विधि में, इस बारे में:

UIApplicationShortcutItem.respondsToSelector(Selector("new")) 

तुम अब भी एक चेतावनी मिल जाएगा (आप नहीं करना चाहिए, और मैं मैंने इसके खिलाफ एक बग दायर किया है), लेकिन यह एक अलग चेतावनी होगी और आप इसे अनदेखा कर सकते हैं।

+2

वास्तविक मजाक यह है कि आप _should_ '# चयनकर्ता (NSObject.new)' कहकर इसे प्राप्त करने में सक्षम हो सकते हैं, क्योंकि वास्तव में यह 'नया' है जिसका मतलब है। लेकिन जब आप कहते हैं, आपको चेतावनी के बजाय एक त्रुटि मिलती है! – matt

+2

@gotnull यहां मेरी बग रिपोर्ट के लिए ऐप्पल का जवाब दिया गया है: "इंजीनियरिंग ने यह निर्धारित किया है कि आपकी बग रिपोर्ट (2481531 9) एक और समस्या (24791200) का डुप्लिकेट है और बंद हो जाएगी।" कृपया, इस पर ढेर करने के लिए स्वतंत्र महसूस करें: अधिक डुप्लिकेट, बेहतर। – matt

6

एक प्रोटोकॉल बनाएं जिसका मौजूदा कारण केवल उपयुक्त चयनकर्ता बनाने के लिए है। इस मामले में:

@objc protocol NewMenuItemHandling { 
    func new() 
} 

आप अनौपचारिक प्रोटोकॉल (एक वस्तु है कि नए चयनकर्ता का जवाब) ले रहे हैं और एक औपचारिक प्रोटोकॉल में यह कर रहे हैं। यदि आपने पहले इस का उपयोग किया है के लिए iOS9.3/watchOS2.2/...

तेजी का उपयोग कर

#selector(NewMenuItemHandling.new) 
+1

शैतानी स्नीकी। – matt

+0

मुझे नहीं पता कि मैं इसे स्नीकी कहूंगा। मूल रूप से उद्देश्य-सी अनौपचारिक प्रोटोकॉल पर बहुत निर्भर करता है (या यदि आप चाहें तो बतख टाइपिंग)। स्विफ्ट प्रोटोकॉल के बारे में थोड़ा अधिक औपचारिक होना चाहता है। तो आपने एक अनौपचारिक प्रोटोकॉल लिया है और स्विफ्ट को बताया है कि यह मौजूद है :-) –

0

संक्षेप में, प्रत्येक "चयनकर्ता: फ़ंक्शन या ऑब्जेक्ट" अब "चयनकर्ता: # चयनकर्ता (वर्ग.फंक्शन (_ :))" जहां भी उपयोग किया जाता है।

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