覆盖Swift的吸气剂

覆盖Swift的吸气剂,第1张

概述我有一种情况,我需要覆盖一个属性的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的吸气剂所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1053226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存