स्विफ्ट 2.0 - बाइनरी ऑपरेटर "|" दो UIUserNotificationType ऑपरेंड पर लागू नहीं किया जा सकता है


193

मैं इस तरह से स्थानीय सूचनाओं के लिए अपना आवेदन पंजीकृत करने का प्रयास कर रहा हूं:

UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))

Xcode 7 और स्विफ्ट 2.0 में - मुझे त्रुटि मिलती है Binary Operator "|" cannot be applied to two UIUserNotificationType operands। क्रिप्या मेरि सहायता करे।


2
।: |: "()" मेरे लिए काम करता है UIApplication.sharedApplication () registerUserNotificationSettings (शून्य) UIUserNotificationType.Badge), श्रेणियों (UIUserNotificationType.Alert UIUserNotificationSettings (forTypes) के साथ चारों ओर से घेरे
Nekak Kinich

1
अब मेरे पास है:Could not find an overload '|' that accepts the supplied arguments
निकिता ज़ेर्नोव

मुझे दूसरा विचार नहीं आया, क्षमा करें।
नेकाइक किन्च

जवाबों:


387

स्विफ्ट 2 में, आप आमतौर पर ऐसा करने के लिए कई प्रकार के लिए अद्यतन किया जाता है जो OptionSetType प्रोटोकॉल के अनुरूप होता है। यह उपयोग के लिए वाक्यविन्यास जैसे सरणी के लिए अनुमति देता है, और आपके मामले में, आप निम्न का उपयोग कर सकते हैं।

let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)

और संबंधित नोट पर, यदि आप यह जांचना चाहते हैं कि क्या एक विकल्प सेट में एक विशिष्ट विकल्प है, तो आपको अब बिटवाइज़ और नील चेक का उपयोग करने की आवश्यकता नहीं है। यदि आप किसी विशिष्ट मान को उसी तरह से निर्धारित करते हैं, तो आप उस विकल्प को सेट कर सकते हैं, जिसमें आप यह जांचेंगे कि क्या कोई सरणी में कोई मान है या नहीं।

let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge], categories: nil)

if settings.types.contains(.Alert) {
    // stuff
}

में स्विफ्ट 3 , नमूने के रूप में निम्नानुसार लिखा होना चाहिए:

let settings = UIUserNotificationSettings(types: [.alert, .badge], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)

तथा

let settings = UIUserNotificationSettings(types: [.alert, .badge], categories: nil)

if settings.types.contains(.alert) {
    // stuff
}

1
यदि आपके पास flags |= .Alert? उपयोग कर सकते हैं तो क्या होगा flags = [flags, .Alert]?
user3246173

अर्थात क्या इसे एक सेट की तरह माना जाता है जहाँ मूल्य अद्वितीय होते हैं या एक एरे के रूप में होते हैं जो संभवतः एक गलत अंतिम मूल्य हो सकता है?
user3246173

@ user3246173 यह इस बात पर निर्भर करता है कि झंडे को कैसे घोषित किया जाता है। ध्वज के प्रकार स्पष्ट रूप से के रूप में घोषित किया जाता है तो UIUserNotificationType, यानी var flags: UIUserNotificationType = [.Alert, .Badge], तो यह एक सेट की तरह व्यवहार किया जाएगा, और आप सेट उदाहरण के तरीकों की तरह उपयोग करके या तो एक तत्व जोड़ सकता है insert(), union(), unionInPlace(), या दृष्टिकोण है कि आप डुप्लिकेट के बारे में चिंता किए बिना उल्लेख के साथ।
मिक मैक्लम

यदि आप स्पष्ट रूप से झंडे को प्रकार के रूप में घोषित नहीं करते हैं UIUserNotificationTypeऔर var flags = [UIUserNotificationType.Alert, UIUserNotificationType.Badge]अपनी घोषणा में कुछ का उपयोग करते हैं, तो ध्वज के प्रकार का अनुमान लगाया जाएगा [UIUserNotificationType], और इसके माध्यम से append()या अन्य तरीकों से तत्वों को जोड़ने पर परिणाम डुप्लिकेट होंगे। उत्तरार्द्ध के मामले में, आप केवल UIUserNotificationTypeइनपुट के रूप में सरणी के साथ एक इंस्टेंस को इनिशियलाइज़ कर सकते हैं और सब ठीक हो जाएगा, लेकिन मैं स्पष्टता के लिए सेट आधारित दृष्टिकोण की सलाह देता हूं।
मिक मैक्लम

35

आप निम्नलिखित लिख सकते हैं:

let settings = UIUserNotificationType.Alert.union(UIUserNotificationType.Badge)

9
रास्ता बहुत जटिल है।
वापसी सच

1
वाह यह घृणित लग रहा है! NSTrackingAreaOptions.MouseEnteredAndExited.union(NSTrackingAreaOptions.MouseMoved).union(NSTrackingAreaOptions.ActiveAlways), लेकिन एक काम के समाधान के लिए धन्यवाद
चाड Scira

2
अगर मैं गलत नहीं हूँ तो आप लिख सकते हैंvar options : NSTrackingAreaOptions =[.MouseEnteredAndExited,.MouseMo‌​ved,.ActiveAlways]
Bobj-C

7

मेरे लिए क्या काम था

//This worked
var settings = UIUserNotificationSettings(forTypes: UIUserNotificationType([.Alert, .Badge, .Sound]), categories: nil)

9
ऊपर दिए गए स्वीकृत उत्तर की तरह लगभग दिखता है। टिप्पणी के रूप में विचार करें?
मैक्स मैकलेओड

2

इसे स्विफ्ट 3 में अपडेट किया गया है।

        let settings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        UIApplication.shared.registerUserNotificationSettings(settings)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.