Checking whether values of unknown type are actually wrapped in Optional

Shoutout to Mike Ash’s mini protocol for checking whether the type you’re dealing with is an optional with a nil value. Handy for generic functions when you’re not sure whether you’ve been passed a straight value, or a value wrapped in an optional:

private protocol OptionalP {
    var isNil: Bool { get }
}

extension Optional: OptionalP {
    var isNil: Bool { return self == nil }
}

switch aValueOfSomeType {
case let anOptional = aValueOfSomeType as? OptionalP where anOptional.isNil: 
// ladies and gentlemen, this value is wrapped in an Optional and is nil 
…

This protocol is from his implementation of type safe user defaults, worth checking out in itself, obviously.

Zoë Smith @zoe