我正在使用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
}
}
Run Code Online (Sandbox Code Playgroud)
我稍后在我的代码中试图调用此方法,并收到一条错误,内容如下:
"不能在不可变值上使用变异成员:'self'是不可变的"
代码是休闲:
init(impresion: ColorImpressionableProtocol?){
super.init(nibName: nil, bundle: nil)
adoptColorsFromImpresion(impresion)
}
Run Code Online (Sandbox Code Playgroud)
我唯一能想到的是,在这种情况下,"自我"是一个协议,而不是一个类.但是,我必须缺少一些使这个概念起作用的东西,一个由协议定义的方法的默认实现,该协议编辑同样由同一协议定义的值.
谢谢你的帮助和时间:)
我有一个对象字典,我想要做的是遍历数据集并返回符合给定协议的对象数组.我遇到传递所需协议的语法问题:
func getObjectsThatConformTo<T>(conformance: T.Type) -> [AnyClass]{
var returnArray: [AnyClass] = []
for(myKey, myValue) in allCreatedObjects{
if let conformantObject = myValue as? conformance{
returnArray.append(conformantObject)
}
return returnArray
}
Run Code Online (Sandbox Code Playgroud)
我看到的错误是"一致性"不是一种类型
谢谢你的帮助和时间