5

में मेरे पास एक तृतीय पक्ष लाइब्रेरी क्लास है जिसका स्रोत मेरे लिए खुला नहीं है। उदाहरण के लिए:असीमित अपवाद मूल्य को संभालें स्विफ्ट

class MyClass: NSObject { 
    let myProperty = 10 
} 

मुझे इस तरह का मूल्य myProperty मिल सकता है।

let test = MyClass().value(forKey: "myProperty") // 10 

मैं जाँच करने के लिए है कि क्या myPropertyMyClass में मौजूद है चाहता हूँ। कारण यह है कि मैं नहीं चाहता कि मेरा ऐप क्रैश हो जाए यदि भविष्य में तीसरे पक्ष के वर्ग कार्यान्वयन में परिवर्तन होता है।

परीक्षण के लिए मैं

guard let test = MyClass().value(forKey: "myProperty1") else { return } // crash 

if let test = MyClass().value(forKey: "myProperty1") { } // crash 

do { 
    let test = try MyClass().value(forKey: "myProperty1") // crash 
} catch { } 

की कोशिश की है कि हर तरह से मैं दुर्घटना पाने में। '[< __lldb_expr_80.MyClass 0x608000223a00> valueForUndefinedKey:]:। इस वर्ग है नहीं कुंजी मान कोडिंग अनुरूप कुंजी myProperty1 के लिए'

*** न आया हुआ अपवाद 'NSUnknownKeyException', कारण की वजह से एप्लिकेशन समाप्त

+0

न लगता है कि इस को रोकने के लिए वैसे भी नहीं है, तो आपको अपने ऐप को अपडेट करें या लिब के देव से संपत्ति का उपयोग करने के अधिक सुविधाजनक तरीके से बदलने के लिए कहें – Tj3n

+3

स्विफ्ट में आप रनटाइम पर अपवाद नहीं पकड़ सकते हैं। – vadian

उत्तर

1

आप lib देव

से बात कर आप Mirror reflection उपयोग कर सकते हैं द्वारा एक बेहतर समाधान खोजने के लिए और अपनी वस्तुओं लेबल की जांच करना चाहिए

let myClass = Mirror(reflecting: MyClass()) 
for (_, attr) in myClass.children.enumerated() { 
    if let propertyName = attr.label, propertyName == "myProperty"{ 
    print(propertyName, attr.value) 
    } 
} 
संबंधित मुद्दे