 	}
 
 
+	public var textTransform: TextTransform? {
+		didSet {
+			guard textTransform != oldValue else {
+				return
+			}
+
+			setNeedsUpdateFinalizedText()
+		}
+	}
+
+
 	public override func tintColorDidChange() {
 		super.tintColorDidChange()
 

		var hasLinks = false
		let tintColor = self.tintColor

		attributedText.enumerateAttributesInRange(NSRange(forString: finalizedText.string), options: [.LongestEffectiveRangeNotRequired]) { attributes, range, _ in
			var finalAttributes = attributes
			if !hasLinks && attributes[NSLinkAttributeName] != nil {
				hasLinks = true

			}

			finalizedText.addAttributes(finalAttributes, range: range)
		}

		if let textTransform = textTransform {
			let transform: (String) -> String
			switch textTransform {
			case .Capitalize: transform = { $0.localizedCapitalizedString } // TODO this isn't 100% reliable when applying to segments instead of to the whole string
			case .Lowercase:  transform = { $0.localizedLowercaseString }
			case .Uppercase:  transform = { $0.localizedUppercaseString }
			}

			finalizedText.transformStringSegments(transform)
		}

		textStorage.setAttributedString(finalizedText)
