小编BPC*_*orp的帖子

在Swift中压倒getter

我有一种情况需要覆盖属性的getter.

假设我们有:

public class MyBaseClass {
    private var _name: String
    public internal(set) var name: String {
        get {
            return self._name
        }
        set {
            self._name = newValue
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我猜,没什么特别的.

现在,如果我尝试覆盖派生类中的getter:

public class MyDerivedClass: MyBaseClass {
    public var name: String {
        get {
            return "Derived - \(super.name)"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到编译错误:无法使用只读属性"name"覆盖mutable属性.

如果我尝试添加setter并覆盖它:

public class MyDerivedClass: MyBaseClass {
    public internal(set) var name: String {
        get {
            return "Derived - \(super.name)"
        }
        set {
            super.name = newValue
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

inheritance overriding getter-setter swift

27
推荐指数
2
解决办法
2万
查看次数

协议之间的实现冲突

我偶然发现了一个问题,我无法弄清楚如何解决它.

假设我们有一个基类(可能来自FrameworkA),其属性名为subject:

public class MyClass {
    public var subject: String
}
Run Code Online (Sandbox Code Playgroud)

我们有一个协议(可能来自FrameworkB),另一个属性但具有相同的名称:

public protocol MyProtocol {
    var subject: String { get }
}
Run Code Online (Sandbox Code Playgroud)

这两个属性代表完全不同的东西.

如何创建一个继承MyClass和实现的类MyProtocol?我该如何使用这些属性?

public class SecondClass: MyClass, MyProtocol {
    var MyProcotol.name: String { // <==== Obviously not allowed
        return "something"
    }
    var MyClass.name: String { // <==== Obviously not allowed
        return "something else"
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为C#允许这样的声明,但我不是100%肯定...

oop inheritance implementation protocols swift

10
推荐指数
1
解决办法
815
查看次数