let x: Any? = nil
x as? CFDictionary
// error: Conditional downcast to CoreFoundation type 'CFDictionary' will always succeed
x as CFDictionary
// error: 'Any?' is not convertible to 'CFDictionary'; did you mean to use 'as!' to force downcast?
x as CFDictionary?
// error: 'Any?' is not convertible to 'CFDictionary?'; did you mean to use 'as!' to force downcast?
x as? CFDictionary?
// error: Conditional downcast to CoreFoundation type 'CFDictionary' will always succeed
The error message is really confusing...
bjhomer
(BJ Homer)
2
This works… but it's super ugly. This is not an ideal solution.
x as? NSDictionary as CFDictionary?
The Swift runtime doesn't currently support querying the types of opaque CF type pointers through using CFGetTypeID (so it just allows the cast to always succeed regardless) – you can however implement the logic yourself, see for example:
1 Like