swift4 Dataの文字列追加拡張 mutatingについて

swift4で文字列を投稿用の Data を組み立てで拡張したい。NSMutableDataを使ってもいいが、試しにDataを使ってみたらはまった。

NSMutableDataだとこんな感じ

extension NSMutableData {
    func appendString(string: String) {
        let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
        appendData(data!)
    }
}

Dataだとこんな感じ(appendでエラーなる)

extension Data {
    func appendString(_ string: String) {
        let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
        append(data!)
    }
}

Cannot use mutating member on immutable value: 'self' is immutable

Dataだとこんな感じ拡張するのが正しそう

extension Data {
    mutating func appendString(_ string: String) {

        let data = string.data(
            using: String.Encoding.utf8,
            allowLossyConversion: true)
        append(data!)

    }
}

mutatingとは

struct と class がありますが、struct の関数には func ( nonmutating func の省略表記 ) と mutating func があります。
通常 class には func だけですが、 protocol を使用すると class にも mutating func を定義することができます。
class における mutating func が何を意味するのか解説します。

mutatingの参考サイト

https://qiita.com/omochimetaru/items/6dd98c70b61701334379