如何在swift协议中使这个可设置的属性工作

时间:2015-08-06 10:16:40

标签: swift

我在操场上有这段代码:

protocol SettableName {
    var name: String {get set}
}

struct SettableNameImpl: SettableName {
    var actualName: String?
    var name: String {
        get {
            if let name = actualName {
                return name
            } else {
                return ""
            }
        }
        set (newName) {
            self.actualName = newName
        }
    }
}

struct Something {
    var settable: SettableName

    func setName(name: String) {
        settable.name = name <-- "cannot assign to result of this expression"
    }
}

我得到&#34;无法分配到这个表达式的结果&#34;在setName方法中。我不能为我的生活理解为什么。

1 个答案:

答案 0 :(得分:1)

通过更改Something中可设置的name属性,您正在更改Something本身的值,这就是为什么{name}功能之前必须放置mutating关键字的原因。希望我很清楚。

struct Something {

    var settable: SettableName

    mutating func setName(name: String) {

        settable.name = name // "error is gone now"
    }
}