我刚刚定义了一个非常简单的协议和一个使用泛型的类,它可以处理这个协议.
在标有错误的行中,您将收到错误:“无法在’aObj’中分配给’flag’.
protocol Flag { var flag: Bool {get set} } class TestFlag<T: Flag> { func toggle(aObj: T) { if aObj.flag { aObj.flag = false; // <--- error } else { aObj.flag = true; // <--- error } } }
你知道为什么以及我需要改变什么来解决它?
从
docs:
Function parameters are constants by default. Trying to change the
value of a function parameter from within the body of that function
results in a compile-time error. This means that you can’t change the
value of a parameter by mistake.
在这种情况下,您可以添加inout,以便在函数调用之外保持切换:
func toggle(inout aObj: T) { if aObj.flag { aObj.flag = false; else { aObj.flag = true; } }
你也可以做到:
func toggle(var aObj: T) { }
但这可能达不到你想要的.