Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift协议仅符合两个特定类别_Ios_Swift_Protocols - Fatal编程技术网

Ios Swift协议仅符合两个特定类别

Ios Swift协议仅符合两个特定类别,ios,swift,protocols,Ios,Swift,Protocols,我想制定一个只有UIlabels和UIButton才能符合的协议,有办法吗 例如: protocol MyProtocol { func setTextValue() } 我希望我的协议只被UILabel和UIButton访问,而不需要其他类 我想制定一个只有UIlabels和UIButton才能符合的协议,有办法吗 哪一个只能是?不是直接的,不是。你不能强加给另一个程序员一个合同,这样程序员就不能让其他类采用你的协议,例如,如果发生这种情况,就迫使编译器抱怨 但也许你的意思是,只有“

我想制定一个只有UIlabels和UIButton才能符合的协议,有办法吗

例如:

protocol MyProtocol {
    func setTextValue()
}
我希望我的协议只被UILabel和UIButton访问,而不需要其他类

我想制定一个只有UIlabels和UIButton才能符合的协议,有办法吗

哪一个只能是?不是直接的,不是。你不能强加给另一个程序员一个合同,这样程序员就不能让其他类采用你的协议,例如,如果发生这种情况,就迫使编译器抱怨


但也许你的意思是,只有“符合”即被采纳的。那样的话,当然可以。没有什么可以阻止您声明一个协议,然后自己声明UILabel和UIButton确实采用了它,而不声明任何其他类采用了它。就这么做吧。

扩展可能是更好的套件,特别是在swift中,这取决于您想要做什么

extension UILabel {
    func greenBackground() {
        self.backgroundColor = .green
    }
}
然后,您可以在项目中的任何位置在任何UILabel上使用它,如下所示:

let label = UILabel()
label.greenBackground()

正如matt所指出的,目前不可能在Swift的类型约束中没有任何构造,但我很好奇您试图用它实现什么。感觉您几乎肯定可以更好地使用重载或完整类型(很可能是结构或最终类)。如果你能做到这一点,你会编写什么代码来使用它?我想在这两个类中设置一个值,并根据该值设置一些常用属性,例如标题、文本颜色等@EkjotKaur,所以你问了一个x-y问题。如果这是你的目标,你应该问一下,而不是假设一个解决方案,然后问这个解决方案是否可行。是的,这听起来是一个非常简单的问题。只需制定一个协议,涵盖您想要的标题、文本颜色等内容,并使您想要的类符合该协议。你为什么要禁止其他类型的人遵守你的协议?@matt,我知道有很多方法可以实现我想要的。但我想知道这是否可以通过我问题中提到的协议实现。有没有办法。你能分享一个例子吗?一个什么的例子?您仍然没有显示出您正试图做什么。你问了一个一般性的“这可能吗”的问题,我回答的正是这个问题。如果你有一个协议,你可以说扩展UIButton:MyProtocol和扩展UILabel:MyProtocol和presto,如果你的代码继续满足协议要求,UIButton和UILabel已经采用了它。但是这个协议可以被UIView访问,我不想要它。正如我在问题中提到的,我只希望有两个特定的类可以访问它。UIView访问它是什么意思?如果不需要,请不要使UIView符合协议。您所要求的在Swift中是不可能的,但我们也相信它在Swift中不是特别有价值的;我们正在试图理解为什么您认为它有价值,因为您可能是对的,并且可能值得打开一个SE about。”但是UIView可以访问此协议“不,它不能!您没有让UIView采用它。”。