如何在 Swift 中将协议添加到 interfacebuilder 中的元素?

How can I add protocol to an element from interfacebuilder in Swift?

如果我在情节提要中有一个 UILabel 的实例,并且我将它作为 IBOutlet 连接到视图控制器。如果我只想为这个 label 添加一些功能,我该怎么做?我知道对于 obj-c,你创建了 UILabel 的子类。但我想知道 swift.

中是否有更好的方法

这个特定的 label 是否有可能符合我将制定的某些协议。

If I want add some functionality only to this label, how can I do it?

您可以使用扩展程序向现有 class 添加功能:

extension UILabel {
    func foo() -> String{
        // this funtionality is availible on all UILabels now. 
        // You can also call self. Example:
        return self.text
    }
}

查找详细信息here

您可以在使用 UILabel

的同一文件中声明 private 扩展
private extension UILabel {}

在这种情况下,只有同一文件中的组件才能使用新功能。我知道,这是一种解决方法,但在我为每个组件创建一个文件的情况下,它有效。

注意协议一致性必须是public,所以你不能使用private访问级别

编辑: 因为你只需要一个文件中的一个 UILabel 的特殊配置,这种方式是不允许的。子类化是唯一的解决方案