Table of Contents
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