2014-07-03 5 views
5

मेरे पास SCNetworkReachabilityFlags चर है और इसे विशेष मानों के लिए जांचना चाहते हैं, उदा। यदि नेटवर्क डब्ल्यूडब्ल्यूएएन के माध्यम से पहुंचा जा सकता है।स्विफ्ट में झंडे के लिए बिटफील्ड (विशेष रूप से एससीनेटवर्क रीचैबिलिटीफ्लैग्स) की जांच कैसे करें?

SCNetworkReachabilityFlags प्रकार typealiasUInt32 के लिए है और विभिन्न विकल्पों को Int चर के रूप में परिभाषित किया गया है।

का उपयोग ऑब्जेक्टिव-सी आप निम्न कर सकता है:

if (flags & kSCNetworkReachabilityFlagsIsWWAN) { 
// do stuff 
} 

स्विफ्ट में अगर मैं इस प्रयास करें:

if reachabilityFlags & kSCNetworkReachabilityFlagsIsWWAN { 
// do stuff 
} 

आप एक संकलक त्रुटि मिलती है: Could not find an overload for '&' that accepts the supplied arguments

मैंने कुछ अन्य प्रश्न पढ़े हैं जहां बिटफील्ड विकल्प जहां RawOptionSet संरचना के रूप में परिभाषित किया गया है। यह SCNetworkReachability में नहीं किया गया है।

स्विफ्ट में झंडे की जांच कैसे करें?

उत्तर

4

वह त्रुटि वास्तव में आपके झंडे-जांच के तर्कों के बारे में शिकायत नहीं कर रही है, लेकिन वापसी मूल्य के बारे में है। एक if कथन एक बूलियन (या कम से कम Logical के अनुरूप कुछ) की अपेक्षा करता है, लेकिन & ऑपरेटर दो Int मानों के लिए Int देता है। आप बस अपनी if बयान में एक तुलना की जरूरत है:

let reachabilityFlags:SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable) 
if 0 != reachabilityFlags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable) { 
    println("reachabilityFlags contains kSCNetworkReachabilityFlagsReachable") 
} 
:

let flags = kSCNetworkReachabilityFlagsReachable 
if 0 != flags & kSCNetworkReachabilityFlagsReachable { 
    println("flags contains kSCNetworkReachabilityFlagsReachable") 
} 

SCNetworkReachabilityFlags के बाद से और स्थिरांक विभिन्न प्रकार के (अजीब) कर रहे हैं, तो आप तुलना काम करने के लिए कुछ कास्टिंग करने की आवश्यकता होगी

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