如何在 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
的特殊配置,这种方式是不允许的。子类化是唯一的解决方案
如果我在情节提要中有一个 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
的特殊配置,这种方式是不允许的。子类化是唯一的解决方案