我正在使用swift 2.0,我有一个协议和对该协议的扩展来创建方法的默认实现,代码如下:
protocol ColorImpressionableProtocol { var lightAccentColor: UIColor? {get set} var accentColor: UIColor? {get set} var darkAccentColor: UIColor? {get set} var specialTextColor: UIColor? {get set} mutating func adoptColorsFromImpresion(impresion: ColorImpressionableProtocol?) } extension ColorImpressionableProtocol { mutating func adoptColorsFromImpresion(impresion: ColorImpressionableProtocol?){ lightAccentColor = impresion?.lightAccentColor accentColor = impresion?.accentColor darkAccentColor = impresion?.darkAccentColor specialTextColor = impresion?.specialTextColor } }
稍后,我在代码中尝试调用此方法,并收到一条错误消息:
“不能在不可变值上使用变异成员:’自身’是不可变的”
代码如下:
init(impresion: ColorImpressionableProtocol?){ super.init(nibName: nil, bundle: nil) adoptColorsFromImpresion(impresion) }
我唯一想到的是这种情况下的“ Self”是协议,而不是类。但是,我必须缺少一些东西才能使该概念起作用。该协议定义的方法的默认实现,该方法还可以编辑同一协议定义的值。
谢谢您的帮助和时间:)
如果您打算仅将协议用于类,则可以将其设为 类协议 (并删除mutating关键字):
mutating
protocol ColorImpressionableProtocol : class { // ... func adoptColorsFromImpresion(impresion: ColorImpressionableProtocol?) }
然后
编译没有问题。