相关疑难解决方法(0)

从AnyObject扩展的协议和仅类协议之间有什么区别?

这两个宣言

protocol SomeProtocol : AnyObject {
}
Run Code Online (Sandbox Code Playgroud)

和这个宣言

protocol SomeProtocol : class {
}
Run Code Online (Sandbox Code Playgroud)

似乎使它只有类可以符合这个协议(即协议的实例是对象的引用),并没有其他效果.

它们之间有什么区别吗?一个人应该优先于另一个吗?如果没有,为什么有两种方法可以做同样的事情?

我正在使用最新发布的Xcode 6.3.1.

protocols class swift

49
推荐指数
5
解决办法
6358
查看次数

协议扩展,变异功能

我正在使用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)

我唯一能想到的是,在这种情况下,"自我"是一个协议,而不是一个类.但是,我必须缺少一些使这个概念起作用的东西,一个由协议定义的方法的默认实现,该协议编辑同样由同一协议定义的值.

谢谢你的帮助和时间:)

iphone protocols ios swift ios9

21
推荐指数
2
解决办法
5065
查看次数

标签 统计

protocols ×2

swift ×2

class ×1

ios ×1

ios9 ×1

iphone ×1