TLDR
वर्तमान:
- स्विफ्ट :
if #available(iOS 9, *)
- ओबज-सी, आईओएस :
if (@available(iOS 11.0, *))
- ओब्ज-सी, ओएस एक्स :
if (NSClassFromString(@"UIAlertController"))
लिगेसी:
- स्विफ्ट (2.0 से पहले के संस्करण) :
if objc_getClass("UIAlertController")
- ओबज-सी, आईओएस (4.2 से पहले के संस्करण) :
if (NSClassFromString(@"UIAlertController"))
- ओबज-सी, आईओएस (11.0 से पहले के संस्करण) :
if ([UIAlertController class])
स्विफ्ट 2+
यद्यपि ऐतिहासिक रूप से विशिष्ट ओएस संस्करणों के बजाय क्षमताओं (या वर्ग अस्तित्व) की जांच करने की सिफारिश की गई है, लेकिन उपलब्धता की जाँच के कारण स्विफ्ट 2.0 में यह अच्छी तरह से काम नहीं करता है ।
इसके बजाय इस तरीके का उपयोग करें:
if
// You can use UIStackView here with no errors
let stackView = UIStackView(...)
} else {
// Attempting to use UIStackView here will cause a compiler error
let tableView = UITableView(...)
}
नोट: यदि आप इसके बजाय उपयोग करने का प्रयास करते हैं objc_getClass()
, तो आपको निम्न त्रुटि मिलेगी:
Only 'UIAlertController' केवल iOS 8.0 या नए पर उपलब्ध है।
स्विफ्ट के पिछले संस्करण
if objc_getClass("UIAlertController") != nil {
let alert = UIAlertController(...)
} else {
let alert = UIAlertView(...)
}
ध्यान दें कि objc_getClass()
की तुलना में अधिक विश्वसनीय है NSClassFromString()
याobjc_lookUpClass()
।
उद्देश्य-सी, आईओएस 4.2+
if ([SomeClass class]) {
SomeClass *instance = [[SomeClass alloc] init];
} else {
}
देखें अधिक जानकारी के लिए code007 के जवाब ।
ओएस एक्स या आईओएस के पिछले संस्करण
Class klass = NSClassFromString(@"SomeClass");
if (klass) {
// class exists
id instance = [[klass alloc] init];
} else {
// class doesn't exist
}
का उपयोग करें NSClassFromString()
। यदि यह वापस आता है nil
, तो कक्षा मौजूद नहीं है, अन्यथा यह कक्षा की वस्तु को लौटा देगा जिसका उपयोग किया जा सकता है।
इस दस्तावेज़ में Apple के अनुसार यह अनुशंसित तरीका है :
[...] आपका कोड [a] वर्ग के अस्तित्व के लिए परीक्षण NSClassFromString()
करेगा, जिसके उपयोग
से एक वैध वर्ग वस्तु वापस आ जाएगी यदि [] वर्ग मौजूद है या शून्य नहीं है यदि वह नहीं करता है। यदि कक्षा मौजूद है, तो आपका कोड इसका उपयोग कर सकता है [...]