Hi,
Its a great way to extend the textview to add functionality instead of subclassing.
I found a small issue with it--The call to resizePlaceholder() method(Line 76) should be made after adding the label as a subview because, the if let condition in the resizePlaceholder method fails as the label is not a subview yet and the label's frame isn't set.

I think it's better not to take control of the delegate property in the extension. Because developer may need set delegate to another Object and do more stuff. We can listen to the text change this way:

@liaa Thanks! :) I used this nice extension. but, when I use textview's delegate, then delegate not work well.. it tangled. but I understand your think, and I implement that, then It work perfectly. thanks!