कैसे इस समाधान के बारे में, मैं पिछले की एक सामान्य संस्करण बनाया जवाब।
fileprivate func unwrap<T>(value: Any)
-> (unwraped:T?, isOriginalType:Bool) {
let mirror = Mirror(reflecting: value)
let isOrgType = mirror.subjectType == Optional<T>.self
if mirror.displayStyle != .optional {
return (value as? T, isOrgType)
}
guard let firstChild = mirror.children.first else {
return (nil, isOrgType)
}
return (firstChild.value as? T, isOrgType)
}
let value: [Int]? = [0]
let value2: [Int]? = nil
let anyValue: Any = value
let anyValue2: Any = value2
let unwrappedResult:([Int]?, Bool)
= unwrap(value: anyValue) // ({[0]}, .1 true)
let unwrappedResult2:([Int]?, Bool)
= unwrap(value: anyValue2) // (nil, .1 true)
let unwrappedResult3:([UInt]?, Bool)
= unwrap(value: anyValue) // (nil, .1 false)
let unwrappedResult4:([NSNumber]?, Bool)
= unwrap(value: anyValue) ({[0]}, .1 false)
निम्नलिखित खेल के मैदान पर कोड है।
शून्य रिटर्न possible..it नहीं है मैं इस विधि 'स्विफ्ट 3 में/xcode 8. – SimplGy
कास्ट करने के लिए Any' एक टाइप किया वैकल्पिक करने में विफल रहता आह हां लगता है! 'कुछ' में लोअरकेस "एस"। रिलीज नोट्स पढ़ना कभी-कभी उपयोगी होता है! तेजी से 3 के लिए, 'z z = मिरर (प्रतिबिंबित: y) .descendant ("कुछ") का उपयोग करें? Int' – SimplGy
'मिरर (प्रतिबिंबित: x) .descendant (...) 'दृष्टिकोण स्विफ्ट 3 में काम नहीं करता है (' मिरर (प्रतिबिंबित: x) .children.count' '0' है), लेकिन' वापसी x ! टी' करता है! कुछ अजीब कारणों से, '(myAnyVar as! SCNRenderingAPI?)' करने की कोशिश कर रहा है 'मुझे एक संकलन-समय त्रुटि' त्रुटि देता है: 'किसी भी' से अधिक वैकल्पिक प्रकार 'SCNRenderingAPI' 'में डाउनकास्ट नहीं कर सकता, लेकिन अंदर एक ही कलाकार कर रहा है आपके जैसा काम है यह बहुत अच्छा काम करता है। चीयर्स! | सुझाए गए संपादन: _ "या अगर आप प्रतिबिंब पसंद नहीं करते हैं तो आप यह कर सकते हैं:" _ → _ "या आप इसे स्विफ्ट 3 में कर सकते हैं या यदि आपको प्रतिबिंब पसंद नहीं है:" _ –