gpt4 book ai didi

ios - 与 "required"相反的 Swift,或在父类(super class)中具有所需 init 方法的工厂设计模式

转载 作者:行者123 更新时间:2023-11-30 13:53:20 26 4
gpt4 key购买 nike

在方法前面添加 required 使得所有子类都必须实现该方法。有没有办法做相反的事情:防止在子类的对象上调用父类(super class)中的方法? 禁止

当我写这篇文章时,我开始意识到这实际上可能不是一个好主意......因为子类的概念是它包含父类(super class)中的所有数据,然后是一些数据。从理论上讲,如果我需要限制对父类(super class)方法的访问,这意味着我可能做错了。

我想做的是为 UIButton 的子类编写一个 init 方法。我希望这个自定义 init 方法成为创建子类对象的唯一方法。但是 UIButton(父类(super class))init 方法是公共(public)的并且是必需的,所以我不能只是在它们上加上一个 private 并为自己编写一个工厂......但我不'我们不希望使用此类的开发人员继续尝试每个 init 函数,直到找到不会崩溃的函数。我想让大家清楚这是要使用的方法。

那么...Swift 中是否有功能可以显式阻止对父类(super class)方法的访问?不管怎样,在没有子类限制对父类(super class)功能的访问的情况下,实现这样的事情的“正确”方法是什么?

最佳答案

除非您需要自己调用该方法,否则可以使用@available(*, unavailable, message="Use XYZ instead")。 Swift 将阻止任何人使用该方法。如果将对象转换为该方法仍然可用的父类(super class),则仍然可以使用它。

就像本例中的sizeThatFits(_:):https://github.com/fluidsonic/JetPack/blob/master/Sources/ui/View.swift#L341

关于ios - 与 "required"相反的 Swift,或在父类(super class)中具有所需 init 方法的工厂设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33980966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com