答疑:能在 setter 方法中调用父类么?

作者:Erica Sadun,原文链接,原文日期:2016/08/08
译者:Cwift;校对:Cee;定稿:CMB

k 给我留言:「能在 setter 方法中调用父类么?比如在赋新值时复写 setter,而是调用其父类的方法?」

答案是当然可以。请看示例:

class Foo {
    var value: String
    init(value: String) { self.value = value }
}

class SubFoo: Foo {
    override var value: String {
        get { return super.value }
        set { super.value = newValue.lowercased()
        }
    }
}

SubFoo 类和 Foo 类的功能相似,只不过在赋值时新值会被转化成小写(虽然没有把转化操作放在初始化时进行)。因此当你新建一个子类的实例并且给它赋值一个大小写混合的字符串时,子类会自动把字符串转化成小写,然后再调用父类的赋值过程。

let a = Foo(value: "Hello World")
let b = SubFoo(value: "Hello World")
debugPrint(a.value, b.value) // "Hello World", "Hello World"
b.value = "Hello Sailor"
debugPrint(a.value, b.value) // "Hello World", "hello sailor"

我不确定这个特性是否会带来非常多的应用场景,不过我认为绝对是有可能的。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,687评论 0 6
  • 1. 使用 #import 相对c的 include 是防止头文件的重复导入 2. NSLog 相对于 print...
    迎风起飞的猪阅读 5,768评论 6 9
  • 在这个有着各种复杂多变的世界计划永远没有变化快。适应及应对这些状况的能力成了我们不断学习的必要技能。今天我们谈的话...
    Wang爱辉阅读 1,423评论 0 1
  • 最近看了央视制作的一部跟踪应届毕业生求职的纪录片,深有感触。毕业求职难,求好职更难。所以许多大四毕业生想借助考研、...
    长思长安阅读 1,384评论 2 2
  • 只是没有如果
    Luminous豫阅读 786评论 0 0