不知道這裏發生了什麼事情,這看起來應該是非常直截了當我有一個協議mutable var ,這是一個具有突變功能的擴展。當我嘗試並使用mtkAnimQueAppend在擴展中聲明時,出現此錯誤:「無法對不可變值使用變異成員:'self '是不可改變的。Swift 2在協議擴展中使用變異函數的錯誤「不能在不可變的值上使用變異成員:'self'是不可變的
protocol MTKAnimateValueDelegate {
var mtkAnimQue:[MTKAnimateValue]? {get set}
}
extension MTKAnimateValueDelegate {
///Adds element to que
mutating func mtkAnimQueAppend(element:MTKAnimateValue) {
if mtkAnimQue != nil {
mtkAnimQue?.append(element)
} else {
mtkAnimQue = [element]
}
}
}
class testClass: MTKAnimateValueDelegate {
var mtkAnimQue:[MTKAnimateValue]?
func testFunc() {
var animValue = MTKAnimateValue(fromValue: 10, toValue: 20, inSeconds: 2)
animValue.isAnimating = true
mtkAnimQueAppend(animValue) //ERROR: "Cannot use mutating member on immutable value: 'self' is immutable
}
}
我發現這個問題在很多層面上都令人難以置信。 Swift首先要做的事情當然是爲視圖控制器製作一個像這樣的混音器。我的意思是它是一種面向協議的語言。而ios「是視圖控制器」。那麼你做的第一件事是什麼?對我來說,(A)蘋果沒有從getgo收集這些信息是無法相信的,(B)這個問題太模糊了。無處不在應該有10,000質量保證!呃,好吧。 – Fattie