                 return (i, JSON(o[i]))
             }
         case let o as NSDictionary:
-            var ks = o.allKeys!.reverse()
+            var ks = o.allKeys.reverse()
             return GeneratorOf<(AnyObject, JSON)> {
                 if ks.isEmpty { return nil }
                 let k = ks.removeLast() as String
-                return (k, JSON(o.valueForKey(k)))
+                return (k, JSON(o.valueForKey(k)!))
             }
         default:
             return GeneratorOf<(AnyObject, JSON)>{ nil }

            return self
        case let ary as NSArray:
            if 0 <= idx && idx < ary.count {
                return JSON(ary[idx]!)
            }
            return JSON(NSError(
                domain:"JSONErrorDomain", code:404, userInfo:[

                _value, options:opts, error:nil
            )
            return NSString(
                data:data!, encoding:NSUTF8StringEncoding
            )
        }
    }
