Không chắc chắn những gì đang xảy ra ở đây, điều này có vẻ như nó nên được khá thẳng về phía trước. Mọi thứ đang diễn ra trong testClass.testFunc, khi tôi thử và sử dụng mtkAnimQueAppend được khai báo trong tiện ích, tôi nhận được lỗi này: "Không thể sử dụng thành viên đột biến trên giá trị không thể thay đổi: ' 'là bất biến.Swift 2 Lỗi khi sử dụng chức năng ngắt trong phần mở rộng Giao thức "Không thể sử dụng biến đổi thành viên trên giá trị bất biến: 'tự' là bất biến
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
}
}
Tôi thấy toàn bộ vấn đề này khá đáng kinh ngạc ở một số cấp độ. Điều đầu tiên bạn muốn làm với Swift, tất nhiên là tạo một mixin hoạt động như thế này, cho các bộ điều khiển xem. Tôi có nghĩa là nó là một ngôn ngữ định hướng giao thức. Và ios "là bộ điều khiển xem". Vì vậy, điều đầu tiên bạn làm là gì? Đối với tôi, nó vượt ra ngoài niềm tin rằng (A) Apple đã không ngăn chặn điều này từ getgo, và (B) vấn đề là rất tối nghĩa. Nên có 10.000 QA về điều này ở khắp mọi nơi! Ah tốt. – Fattie