त्वरित उत्तर…
स्विफ्ट 2.0 के रूप में, आप #available
एक if
या guard
कोड को बचाने के लिए उपयोग कर सकते हैं जो केवल कुछ सिस्टम पर चलाया जाना चाहिए।
if #available(iOS 9, *) {}
ऑब्जेक्टिव-सी में, आपको सिस्टम संस्करण की जांच करने और तुलना करने की आवश्यकता है।
[[NSProcessInfo processInfo] operatingSystemVersion]
iOS 8 और इसके बाद के संस्करण में।
Xcode 9 के रूप में:
if (@available(iOS 9, *)) {}
पूरा जवाब…
उद्देश्य-सी, और दुर्लभ मामलों में स्विफ्ट में, डिवाइस या ओएस क्षमताओं के संकेत के रूप में ऑपरेटिंग सिस्टम संस्करण पर भरोसा करने से बचना बेहतर है। आमतौर पर यह जांचने का एक अधिक विश्वसनीय तरीका है कि क्या कोई विशेष सुविधा या वर्ग उपलब्ध है।
एपीआई की उपस्थिति के लिए जाँच:
उदाहरण के लिए, यदि आप UIPopoverController
वर्तमान डिवाइस पर उपलब्ध है , तो आप जाँच कर सकते हैं NSClassFromString
:
if (NSClassFromString(@"UIPopoverController")) {
// Do something
}
कमजोर रूप से जुड़े वर्गों के लिए, सीधे कक्षा को संदेश देना सुरक्षित है। विशेष रूप से, यह चौखटे के लिए काम करता है जो स्पष्ट रूप से "आवश्यक" के रूप में जुड़ा नहीं है। लापता कक्षाओं के लिए, अभिव्यक्ति शून्य का मूल्यांकन करती है, स्थिति को विफल करती है:
if ([LAContext class]) {
// Do something
}
कुछ वर्ग, जैसे CLLocationManager
और UIDevice
, उपकरण क्षमताओं की जांच करने के तरीके प्रदान करते हैं:
if ([CLLocationManager headingAvailable]) {
// Do something
}
प्रतीकों की उपस्थिति के लिए जाँच:
कभी-कभी, आपको एक स्थिरांक की उपस्थिति के लिए जांच करनी चाहिए। यह आईओएस 8 में पेश UIApplicationOpenSettingsURLString
किया गया था, के माध्यम से सेटिंग्स ऐप को लोड करने के लिए उपयोग किया जाता है -openURL:
। IOS से पहले मान मौजूद नहीं था। इस एपीआई के लिए निएल पास करना दुर्घटनाग्रस्त हो जाएगा, इसलिए आपको निरंतर अस्तित्व के सत्यापन को ध्यान में रखना होगा:
if (&UIApplicationOpenSettingsURLString != NULL) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
ऑपरेटिंग सिस्टम संस्करण के खिलाफ तुलना:
मान लेते हैं कि ऑपरेटिंग सिस्टम संस्करण की जाँच करने के लिए आपको अपेक्षाकृत दुर्लभ आवश्यकता का सामना करना पड़ रहा है। IOS 8 और इसके बाद के संस्करण की परियोजनाओं के लिए, NSProcessInfo
त्रुटि की कम संभावना वाले संस्करण की तुलना करने के लिए एक विधि शामिल है:
- (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version
पुराने सिस्टम को लक्षित करने की परियोजनाओं का उपयोग कर सकते systemVersion
पर UIDevice
। Apple अपने GLSprite नमूना कोड में इसका उपयोग करता है ।
// A system version of 3.1 or greater is required to use CADisplayLink. The NSTimer
// class is used as fallback when it isn't available.
NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
displayLinkSupported = TRUE;
}
यदि जो भी कारण आप तय करते हैं कि systemVersion
आप क्या चाहते हैं, तो इसे एक स्ट्रिंग के रूप में व्यवहार करना सुनिश्चित करें या आप पैच संशोधन संख्या को कम करने का जोखिम उठाते हैं (उदाहरण। 3.1.2 -> 3.1)।