This is helpful, and your suggestion is encouraging me to lean towards a non-pure solution, so thank you for that 🙂. Unfortunately, the code above crashes in my use case (feeding it a dictionary read from a property list file), and it still has some of the problems I'm seeking to avoid, namely, the as! Key cast, and frequent use of NS objects, however I think I'm ready to give up the ghost on the latter.I should have been clearer about the code that works, but feels wrong, it was this:extension Dictionary { func hasIntroduction() -> Bool { if let value = self[kHasIntroductionKey as! Key] as? NSString { return value.boolValue } return false } }The following alternative extension, on NSDictionary, eliminates the as! Key conversion, and is what I am currently leaning towards:extension NSDictionary { func hasIntroduction() -> Bool { if let value = self[kHasIntroductionKey] as? NSString { return value.boolValue } return false } }I'm still holding out hope that there is a more general Swift solution