如何在 Swift 中重写 setter

2024-01-07

超类:

class MySuperView : UIView{
    var aProperty ;
}

子类继承超类:

class Subclass : MySuperClass{
    // I want to override the aProperty's setter/getter method
}

我想重写超类属性的 setter/getter 方法,

如何在 Swift 中重写这个方法?请帮助我,谢谢。


您想用自定义设置器做什么?如果您希望类在设置值之前/之后执行某些操作,您可以使用willSet/didSet:

class TheSuperClass { 
   var aVar = 0 
} 

class SubClass: TheSuperClass { 
     override var aVar: Int { 
         willSet { 
            print("WillSet aVar to \(newValue) from \(aVar)") 
        } 
        didSet { 
            print("didSet aVar to \(aVar) from \(oldValue)") 
        } 
    } 
} 


let aSub = SubClass()
aSub.aVar = 5

控制台输出:

将aVar从0设置为5

did将aVar从0设置为5

但是,如果您想完全更改 setter 与超类交互的方式:

class SecondSubClass: TheSuperClass { 
     override var aVar: Int { 
        get {
            return super.aVar
        }
        set { 
            print("Would have set aVar to \(newValue) from \(aVar)") 
        } 
    } 
} 

let secondSub = SecondSubClass()
print(secondSub.aVar)
secondSub.aVar = 5
print(secondSub.aVar)

控制台输出:

会将 aVar 从 0 设置为 5

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中重写 setter 的相关文章

随机推荐

  • 带有多重选择的 kivy spinner 小部件

    我正在寻找 Spinner 类型 或类似的东西 的 kivy 小部件 最好在 python kv 文件中 例如 我可以在其中通过复选框选择多个项目 所选项目应在元组 中可用 在图片 start png 中您将找到起始情况 表单中有一个标签和
  • 应用程序进入前台后 viewDidAppear 不会再次触发

    我在 iPhone 应用程序代码中发现了一个问题 即 viewDidAppear 方法并不总是触发 当您启动应用程序时 事件将按预期触发 但是 如果我使用能够进行多任务处理的手机关闭应用程序并重新打开 我的 viewDidAppear 事件
  • Angular js ng 重复条件 ng 类不应用 css 类

    我有一个 ng 重复 它的 ng 类在我的 css 类名称中包含连字符的情况下不应用 css 类 li item name li 我做错了什么吗 如果我将 css 类名更改为 isomeclass 它就可以工作 AngularJS v1 0
  • 将参数传递给 MVC Ajax.ActionLink

    如何将 TextBox 的值作为 ActionLink 的参数发送 我需要使用 Html TextBoxFor 控制器 操作如下所示 public class MyController public ActionRes
  • Microsoft 是否有关于不同 Windows 平台上应用程序数据与用户数据存储的最佳实践文档?

    创建面向多个 Windows 版本的应用程序时 确定应用程序特定数据应存储在何处的最佳实践是什么 具体来说 应用程序特定数据 例如应用程序配置数据 用户特定数据 设置 例如 我知道在 Windows Vista 上有可以使用的环境变量 例如
  • return 语句中的 C++ constexpr 函数

    为什么 constexpr 函数不在编译时计算 而是在运行时在 main 函数的 return 语句中计算 它尝试过 template
  • 在带有 ES 模块的 Node.js 中使用相对路径导入

    过去我用过app module path每当我想在 Node js 应用程序中使用相对路径时 如果我通过以下方式使用 ES 模块 mjs格式 如何在某个目录路径变得相对的情况下具有相同的功能 以另一种方式 我是否能够为目录分配一个别名 以便
  • 如何在solr中搜索多个方面?

    我需要在 solr 中搜索方面 如下所示 fq 国家 美国 fq 国家 加拿大 fq 主题 工业 fq 主题 政治 现在我需要搜索具有上述方面 逻辑与 和 逻辑或 的文章 假设我有以下文章 国家 美国法国 主题 英思科 国家 美国加拿大 主
  • Java 奇怪的程序输出中的移位运算符

    我遇到了以下程序 它的行为方式出乎意料 public class ShiftProgram public static void main String args int i 0 while 1 lt lt i 0 i System out
  • 尽管进程已终止,为什么 os.kill(pid, 0) 返回 None ?

    这个问题涉及到这个答案 https stackoverflow com a 13402639 1125413我的其他问题之一 在这个答案中我被告知可以使用os kill pid 0 检查子进程是否已终止 如果它还在运行 None被返回 如果
  • C# 文件关联的正确方法

    我一直在寻找一种正确的方法来使文件关联在 WinXP 及更高版本上工作 如果该关联已存在 则应将其替换 我开发的应用程序始终在管理模式下运行 因此权限应该不成问题 我遇到过一些旧帖子 其中有一些示例代码 但其中一些工作得不够好 有些则根本不
  • 更新到 macOS 13.3 无法编译 cpp

    更新到 Ventura 13 3 安装最新的 Xcode 和命令行工具后 我在编译任何 cpp 文件时收到此错误 Applications Xcode app Contents Developer Platforms MacOSX plat
  • 为什么默认参数不能依赖于非默认参数? [复制]

    这个问题在这里已经有答案了 考虑以下构造函数 class MyClass MyClass unsigned int dimension std vector vector unitaryVector dimension where unit
  • 如何根据日历模式创建事件?

    我正在尝试为某人创建一个 轮班 日历 我知道该模式从哪一天开始 并且我知道该模式的断断续续的日期 但我在将其翻译成代码时遇到了麻烦 他们工作4天 休息3天 工作4天 休息3天 工作4天 休息2天 如此循环 我需要创建一些逻辑来基于此为日历创
  • Material SearchView 实现错误

    我正在开发一个 Android 应用程序 现在一切都很好 但是当尝试使用 Google 指南实现 Material SearchView 并逐步遵循一些教程时 我无法弄清楚这个错误 菜单 main xml menu menu
  • 在 git repo 上工作,无需 cd 进入目录

    当我还没有在存储库上运行 git 命令时 我将如何运行cd进入那个目录 IE 我想跑git branch repos myrepo git 从 git 1 8 5 开始 使用 C option git C Users michael Dev
  • 如何在 C++ 中使用 XCode 4.2 设置 OpenGL 项目?

    我正在尝试使用 C 来了解一些图形 我认为最好从功能最强大的图形框架开始 因此我将使用 Lion 中包含的 OpenGL 基本上我在 XCode 4 2 中启动了一个 C 命令行工具 这就是我所做的一切 我需要以某种方式将 OpenGL 与
  • 为什么施特拉森矩阵乘法比标准矩阵乘法慢得多?

    I have written programs in C Python and Java for matrix multiplication and tested their speed for multiplying two 2000 x
  • 如何转换 Shapefile 的坐标?

    我正在尝试将邻居数据放入我的应用程序中 但我使用的数据存在问题 这些数据是我从here http gispub02 sfgov org website sfshare catalog realtor neighborhoods zip 该文
  • 如何在 Swift 中重写 setter

    超类 class MySuperView UIView var aProperty 子类继承超类 class Subclass MySuperClass I want to override the aProperty s setter g