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

Ios 如何将协议添加到Swift中interfacebuilder的元素中?,ios,swift,swift-protocols,swift-extensions,Ios,Swift,Swift Protocols,Swift Extensions,如果我在故事板中有一个UILabel的实例,并将其连接到视图控制器,作为IBOutlet。如果我只想在这个标签上添加一些功能,我该怎么做?我知道,对于obj-c,您创建了UILabel的子类。但我想知道在swift中是否有更好的方法 这个特定的标签是否可能符合我将制定的一些协议 如果我只想在这个标签上添加一些功能,我该怎么做 您可以使用扩展向现有类添加功能: extension UILabel { func foo() -> String{ // this funt

如果我在故事板中有一个
UILabel
的实例,并将其连接到视图控制器,作为
IBOutlet
。如果我只想在这个
标签上添加一些功能,我该怎么做?我知道,对于obj-c,您创建了
UILabel
的子类。但我想知道在swift中是否有更好的方法

这个特定的
标签
是否可能符合我将制定的一些协议

如果我只想在这个标签上添加一些功能,我该怎么做

您可以使用扩展向现有类添加功能:

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

如果我只想在这个标签上添加一些功能,我该怎么做

您可以使用扩展向现有类添加功能:

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

查找详细信息。

您可以在使用
ui标签的同一文件中声明
private
扩展名

private extension UILabel {}
在这种情况下,只有同一文件中的零部件才能使用新功能。我知道,这是一种变通方法,但在我的例子中,我为每个组件创建一个文件,它是有效的

请注意,协议一致性必须是公共的,因此不能使用
private
访问级别


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

您可以在使用
UILabel的同一文件中声明
private
扩展名

private extension UILabel {}
在这种情况下,只有同一文件中的零部件才能使用新功能。我知道,这是一种变通方法,但在我的例子中,我为每个组件创建一个文件,它是有效的

请注意,协议一致性必须是公共的,因此不能使用
private
访问级别


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

如果你想符合任何协议,你需要将这个
UILabel
子类化,或者在你的应用程序OK中创建所需范围内的扩展,所以我认为扩展就是一种方法。是否可以仅为一个标签配置扩展?如果您想要符合任何协议,您需要将此
UILabel
子类化,或者在应用程序OK中的所需范围内创建扩展,因此我认为扩展就是一种方法。可以只为一个标签配置extenstion吗?好的,但是如果a不想让它成为屏幕上所有标签的一部分怎么办?那么您必须子类
UILabel
并使用自定义类。好的,但是,如果a不希望它成为屏幕上所有标签的一部分,该怎么办?您必须子类化
UILabel
,并使用自定义类。好的,如果我在视图控制器中声明多个标签,则此专用扩展仍将影响所有标签。感谢您的帮助,meThen子类化是唯一的解决方案@KlemenZagarok,请将此解释放在您答案的末尾,我将其标记为已接受的解决方案。Dod it@KlemenZagar。如果我在一个视图控制器中声明多个标签,那么这个私有扩展仍然会影响所有标签,希望这对我有所帮助。感谢您的帮助,meThen子类化是唯一的解决方案@KlemenZagarok,请将此解释放在您答案的末尾,我将其标记为已接受的解决方案。Dod it@KlemenZagar。希望有帮助