 
 public extension NSString {
     /**
-     Returns an `NSRange` indicating the length of the `NSString`.
+     An `NSRange` indicating the length of the `NSString`.
+     
+     - returns: An `NSRange`
+     */
+    var range: NSRange {
+        return String(self).range
+    }
+
+    var stringByLowercasingFirstLetter: String {
+        return String(self).stringByLowercasingFirstLetter
+    }
+
+    var stringByUppercasingFirstLetter: String {
+        return String(self).stringByLowercasingFirstLetter
+    }
+
+    var stringByReplacingSpacesWithDashes: String {
+        return String(self).stringByReplacingSpacesWithDashes
+    }
+
+    public func stringByConverting(toNamingFormat naming: VariableNamingFormat) -> String {
+        return String(self).stringByConverting(toNamingFormat: naming)
+    }
+}
+
+public extension NSAttributedString {
+    /**
+     Returns an `NSRange` indicating the length of the `NSAttributedString`.
      
      - returns: An `NSRange`
      - author: Daniel Loewenherz

     - date: February 17, 2016
     */
    var range: NSRange {
        return String(self).range
    }

    var stringByLowercasingFirstLetter: String {
        return String(self).stringByLowercasingFirstLetter
    }

    var stringByUppercasingFirstLetter: String {
        return String(self).stringByLowercasingFirstLetter
    }

    var stringByReplacingSpacesWithDashes: String {
        return String(self).stringByReplacingSpacesWithDashes
    }

    public func stringByConverting(toNamingFormat naming: VariableNamingFormat) -> String {
        return String(self).stringByConverting(toNamingFormat: naming)
    }
}

public extension NSAttributedString {
    /**
     Returns an `NSRange` indicating the length of the `NSAttributedString`.
     
     - returns: An `NSRange`
     - author: Daniel Loewenherz
     - copyright: ©2016 Lionheart Software LLC
     - date: February 17, 2016
     */
    var range: NSRange {
        return string.range
    }


     Returns an `NSRange` indicating the length of the `String`.
     
     - returns: An `NSRange`
     */
    var range: NSRange {
        return NSMakeRange(0, characters.count)
    }

    /**
     Converts an `NSRange` for the current `String` to a a type of `Range<String.Index>`.

     - returns: A range of type `Range<String.Index>`
     */
    func toRange(_ range: NSRange) -> Range<String.Index> {
        let start = characters.index(startIndex, offsetBy: range.location)
        let end = characters.index(start, offsetBy: range.length)
        return start..<end
    }

    /**
     - returns: Returns the length of the current string.
     */
    var length: Int {
        return NSString(string: self).length
    }

    /**
     Trim all characters from the string in the specified character set.
     
     - parameter characterSet: a `CharacterSet` specifying which characters to trim from the string
     */
    mutating func trim(_ characterSet: CharacterSet) {
        self = self.trimmingCharacters(in: characterSet)
    }

    /**
     URL encode the current string.
     */
    mutating func URLEncode() {
        guard let string = URLEncodedString else {
            return
