Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
防止覆盖Swift扩展中实现的协议方法_Swift_Struct_Protocols - Fatal编程技术网

防止覆盖Swift扩展中实现的协议方法

防止覆盖Swift扩展中实现的协议方法,swift,struct,protocols,Swift,Struct,Protocols,我使用structs在一个特定的数据格式上移动,链接一个文本和一个颜色。我之所以将这些函数耦合到一个结构中,而不是一个函数,是因为我需要有两个函数在结构和字典之间进行转换,以便保存它 问题是,我在许多领域使用这种结构,为了保持正确的命名,我有多个这样的结构,它们有完全相同的实现,只是名称不同。目前,该行为在协议中定义,但每个单独的结构都可以覆盖它。有什么办法禁止这样做吗 例如,标题颜色结构协议具有此函数的扩展 init(dictionary: Dictionary<String, Any&

我使用structs在一个特定的数据格式上移动,链接一个文本和一个颜色。我之所以将这些函数耦合到一个结构中,而不是一个函数,是因为我需要有两个函数在结构和字典之间进行转换,以便保存它

问题是,我在许多领域使用这种结构,为了保持正确的命名,我有多个这样的结构,它们有完全相同的实现,只是名称不同。目前,该行为在协议中定义,但每个单独的结构都可以覆盖它。有什么办法禁止这样做吗

例如,
标题颜色结构协议
具有此函数的扩展

init(dictionary: Dictionary<String, Any>) {
    self.init()

    self.title = dictionary["title"] as! String

    if let red = dictionary["red"], let green = dictionary["green"], let blue = dictionary["blue"] {
        self.color = UIColor(colorLiteralRed: red as! Float, green: green as! Float, blue: blue as! Float, alpha: 1)
    }
}
init(字典:字典){
self.init()
self.title=字典[“title”]作为!字符串
如果让红色=字典[“红色”],让绿色=字典[“绿色”],让蓝色=字典[“蓝色”]{
self.color=UIColor(colorLiteralRed:red as!Float,green:green as!Float,blue:blue as!Float,alpha:1)
}
}

没有理由认为任何符合此协议的结构都应该重写此方法,因此我想“锁定”它,对类使用类似于
final
关键字的内容。这可能吗?

您不能阻止类型实现协议方法。但是,静态调度未定义为协议要求的扩展方法可能会有所帮助:。您不能阻止类型实现协议方法。但是,静态调度未定义为协议需求的扩展方法可能会有所帮助:。