Swift中的子类化与扩展

15

出于某些原因,我希望自定义一个UITextField。所以目前我已经创建了它的子类并添加了一些方法。

那么,我可以使用扩展来扩展UITextField吗?这是一个好的方法吗?请解释!


2
你应该解释一下你想要做什么。有些事情可以通过继承来完成,但不能使用扩展,而其他事情则可以通过扩展来实现,但不适用于继承。你的问题“原样”太过泛泛。就像回答“什么更好,汽车还是直升机?”这个问题一样,没有明确的答案。 - Antonio
任何代码、示例,您想在文本字段行为方面修改什么? - Maxim Shoustin
2个回答

62

根据经验法则(YMMV):

  • 您是否正在添加通用功能,这些功能应该对每个 UITextField 可用? 如果是这样,请创建一个扩展(extension)。所有UITextField实例都可以调用新方法。
  • 您是否正在添加仅限于您精确定位的特定 UITextField 实例的功能? 如果是这样,请创建一个子类(subclass)。只有子类的实例才能使用新方法。

还有其他技术考虑因素,例如扩展无法添加字段。


非常好的回答。你的意思是如果我们编写一个扩展,那么无论它在哪里,每个其他的视图控制器都会看到它?我们需要使用任何“public”,“internal”属性或类似的东西吗? - mfaani
@Honey 这取决于您需要的范围:您需要在哪里使用 extension - notsoux

1

Swift扩展是不能被覆盖的。因此,如果您想创建一个用于测试目的的子类,则会受到限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接