Swift 2: метод мутации структуры не работает изнутри замыкания
Я пытаюсь вызвать метод мутации на одной из моих структур из замыкания. Это не работает.
Я планирую закрытие из dispatch_after
, Я получаю сообщение об ошибке Partial application of 'mutating' method is not allowed
,
Это работало в Swift 1.2. Не в Swift 2. Ошибка появилась после обновления. Вот автономный пример, который покажет ошибку на игровой площадке.
struct MutationTest {
var timestamp: Int = 0
mutating func changeTimestamp () {
timestamp += 1 //NO ERROR HERE
}
mutating func callChangeTimeStamp() {
changeTimestamp() //NO ERROR HERE
}
mutating func scheduleCallChangeTimestamp() {
let highQConstant = DISPATCH_QUEUE_PRIORITY_HIGH
let highQ = dispatch_get_global_queue(highQConstant, 0)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(3 * NSEC_PER_SEC))
dispatch_after(time, highQ, callChangeTimeStamp) //ERROR HERE
}
}
Кстати, я получаю точно такую же ошибку, если я изменяю changeTimestamp
метод для:
mutating func changeTimestamp () {
self = MutationTest(timestamp: timestamp + 1)
}
1 ответ
Решение
Кажется, это работает нормально:
dispatch_after(time, highQ, { self.callChangeTimeStamp() })