使用Getters和Setter来修改没有Swift中Subclassing的值

使用Getters和Setter来修改没有Swift中Subclassing的值,第1张

概述假设我有一个类,当我设置它的属性时,我希望它使用类似.fileType的文件类型追加该属性: class File { var fileName: String { get { return self.fileName } set { self.fileName = fileName + ".fileType" } } 假设我有一个类,当我设置它的属性时,我希望它使用类似.fileType的文件类型追加该属性:

class file {    var filename: String {    get {        return self.filename    }    set {        self.filename = filename + ".fileType"    }    }}

我尝试使用这样的:

let newfile = file()newfile.filename = "My file"

不幸的是,变量从未设置:

我有两种可能的解决方法.

 选项1:设置后观察值

class file {    var filename: String = "" {    dIDSet {        self.filename += ".fileType"    }    }}let file = file()file.filename = "Somename" // Somename.fileType

但是有了这个,我必须等到这个值已经设置好才能修改它.对于这个特殊的例子,它并没有太大的区别;但是,我希望能够避免这种情况.

 选项2:子类

此解决方案基于示例here.搜索“​​speedlimitedCar”

class file {    var filename = ""}class Subfile: file {    overrIDe var filename: String {    get {        return super.filename    }    set {        super.filename = newValue + ".fileType"    }    }}let subfile = Subfile()subfile.filename = "Hello" // Hello.fileType

 题

我还可以创建一个辅助属性来存储值并在filename的getter / setter中访问它,但有没有办法避免所有这些并直接在其getter / setter中修改属性?

解决方法 如果使用set和get,则必须计算属性.它没有实际的存储空间.

此代码定义用于保存数据的var和用于处理访问的计算var.这类似于你在Objective-C中所拥有的(除了在Objective-C中你可以通过将它变为私有来“隐藏”实际变量,或者最近,将它合成为标题中从未提及过的变量).

class file {    // this stores the actual data,do not access it directly,consIDer it private    var thefilename: String = ""    // this is the real interface    var filename: String {        get {            return self.thefilename        }        set(name) {            self.thefilename = name + ".fileType"        }    }}

你也可以写这样的集合:

set {    self.thefilename = newValue + ".fileType"}

其中newValue是默认名称,如果省略set的参数声明.

但你可能想要做的就是你已经做过的事情(并且由于不明原因被拒绝):

var filename: String = "" {    dIDSet {        self.filename += ".fileType"    }}

这是正确的方法.

请注意“我必须等到该值已经设置才能修改它.”不是真的.它看起来像这样,但编译器可以很好地优化代码(可能会).

总结

以上是内存溢出为你收集整理的使用Getters和Setter来修改没有Swift中Subclassing的值全部内容,希望文章能够帮你解决使用Getters和Setter来修改没有Swift中Subclassing的值所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1010574.html

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

发表评论

登录后才能评论

评论列表(0条)

保存