構造体型では、非同期処理でselfを突然変異させると以下のようにエラーが発生します。Swift3で非同期に突然変異する構造体とクラスの異なる処理
closure cannot implicitly captured a mutating self
私はクラス型への構造体を変更した場合は、エラーが消えます。 struct
とclass
の違いは、mutate selfが非同期では何ですか?
struct Media {
static let loadedDataNoti = "loadedDataNotification"
let imagePath: String
let originalPath: String
let description: String
var imageData: Data?
let tag: String
var likeCount: Int?
var commentCount: Int?
var username: String?
var delegate: MediaDelegate?
public init(imagePath: String, originalPath: String, description: String, tag: String, imageData: Data? = nil) {
self.imagePath = imagePath
self.originalPath = originalPath
self.description = description
self.tag = tag
if imageData != nil {
self.imageData = imageData
} else {
loadImageData()
}
}
mutating func loadImageData() {
if let url = URL(string: imagePath) {
Data.getDataFromUrl(url: url, completion: { (data, response, error) in
if (error != nil) {
print(error.debugDescription)
return
}
if data != nil {
self.imageData = data! // Error: closure cannot implicitly captured a mutating self
NotificationCenter.default.post(name: NSNotification.Name(rawValue: Media.loadedDataNoti), object: data)
}
})
}
}
は、このコードはmutating' 'である機能を確認します。この 'func(){//あなたのコード}を変更する'のように。 – shallowThought
関数は 'mutating'宣言されていますか? –
@shallowThought私は試しました。しかし結果は同じでした。 –