Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了覆盖Swift的吸气剂大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一种情况,我需要覆盖一个属性的getter。 假设我们有: public class MyBaseClass { private var _name: String public internal(set) var name: String { get { return self._name } set {
我有一种情况,我需要覆盖一个属性的getter。

假设我们有:

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

没想到,我猜。

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

public class MyDerivedClass: MyBaseClass {
    public var name: String {
        get {
            return "Derived - \(super.Name)"
        }
    }
}

我得到编译错误:不能用只读属性’name’覆盖mutable属性

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

public class MyDerivedClass: MyBaseClass {
    public internal(set) var name: String {
        get {
            return "Derived - \(super.Name)"
        }
        set {
            super.name = newValue
        }
    }
}

我得到错误:重写var的Setter必须与其覆盖的声明一样可访问。

如果我尝试以下:

public class MyDerivedClass: MyBaseClass {
    public internal(set) var name: String {
        get {
            return "Derived - \(super.Name)"
        }
    }
}

然后,编译器崩溃…

如何才能实现仅覆盖吸气剂?

这对我有用:
public class MyBaseClass {
        private var _name: String = "Hi"
        public internal(set) var name: String {
            get {
                return self._name
            }
            set {
                self._name = newValue
            }
        }
    }

    public class MyDerivedClass:MyBaseClass {
        override public var name: String {
            get {
                return "Derived - \(super.Name)"
            }
            set {
                super._name = newValue
            }
        }
    }

    MyDerivedClass().name

编辑

这段代码在操场上适用于我,将其放在“来源” – > SupportCode.swift文件

public class MyBaseClass {
    private var _name: String = "Hi"
    public internal(set) var name: String {
        get {
            return self._name
        }
        set {
            self._name = newValue
        }
    }
    public init() {

    }

    }

    public class MyDerivedClass:MyBaseClass {
        override public var name: String {
            get {
                return "Derived - \(super.Name)"
            }
            set {
               // do nothing
            }
        }
       public override init() {

        }
    }

这是一个风筝,因为我得到相同的警告,因为内部(集)不能被放置在被覆盖的子类变量之前。这可能是一个bug。而且我也在欺骗,以确保派生类的setter没有任何作用。

内部(集)或私有(集)的更常见的用法是使用类似于文档中的代码

public class MyBaseClass {
    public private(set) var _name: String = "Hi"
    public var name: String {
        get {
            return self._name
        }
        set {
            self._name = newValue
        }
    }
    public init() {

    }

}

public class MyDerivedClass:MyBaseClass {
    override public var name: String {
        get {
            return "Derived - \(super.Name)"
        }
        set {
           super._name = newValue
        }
    }
   public override init() {

    }
}

在这里,可以直接使用MyDerivedClass()._ name来读取设置器,但不能更改。这个MyDerivedClass()._ name =“Fred”会引发一个错误,但MyDerivedClass()。name =“Fred”将会OK。

大佬总结

以上是大佬教程为你收集整理的覆盖Swift的吸气剂全部内容,希望文章能够帮你解决覆盖Swift的吸气剂所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。