大佬教程收集整理的这篇文章主要介绍了使用Getters和Setter来修改没有Swift中Subclassing的值,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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中修改属性?
此代码定义用于保存数据的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" }
但你可能想要做的就是你已经做过的事情(并且由于不明原因被拒绝):
var filename: String = "" { didSet { self.filename += ".fileType" } }
这是正确的方法.
以上是大佬教程为你收集整理的使用Getters和Setter来修改没有Swift中Subclassing的值全部内容,希望文章能够帮你解决使用Getters和Setter来修改没有Swift中Subclassing的值所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。