【发布时间】:2016-12-10 13:30:36
【问题描述】:
在 struct 类型中,在异步过程中改变 self 会产生如下错误。
closure cannot implicitly captured a mutating self
如果我将结构更改为类类型,错误就会消失。
struct 和 class 在异步中自我变异时有什么区别?
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中的函数。喜欢这个mutating func() { //your code }。 -
函数是否声明为
mutating? -
@shallowThought 我试过了。但结果是一样的。
-
发布更多代码。
-
添加了完整的代码。
标签: swift class asynchronous struct swift3