我想知道一个简单的类中的初始化程序等同于什么协议,它只包含初始化功能,并且仅用于在具体类中扩展。协议扩展初始化程序
所以可能是最简单的就是显示代码 - 我要找的协议扩展相当于如下:
import UIKit
class Thing {
var color:UIColor
init(color:UIColor) {
self.color = color
}
}
class NamedThing:Thing {
var name:String
init(name:String,color:UIColor) {
self.name = name
super.init(color:color)
}
}
var namedThing = NamedThing(name: "thing", color: UIColor.blueColor())
我期待的代码看起来像:
protocol Thing {
var color:UIColor {get set}
}
extension Thing {
init(color:UIColor) {
self.color = color
}
}
class NamedThing:Thing {
var name:String
var color:UIColor
init(name:String,color:UIColor) {
self.name = name
self.init(color:color)
}
}
我见过其他StackOverflow问题(例如How to define initializers in a protocol extension?)中提出的解决方案,但我不确定它们是否工作,也没有专门解决类初始化程序中的其他参数的这个问题。
符合AnyObject我们多余的,隐式解包的名称和颜色是危险的,而不是必需的(改为设置默认值) – user3441734
感谢您的富有洞察力的评论,您似乎遇到了类似的障碍。我同意你的评论是否值得这样做。我想我正在寻找在面向协议的方法中实现上述问题的最佳实践。需要给vars默认值或者让它们隐式解开对我来说似乎不是太方便也不是最好的做法,并且让我怀疑这是否使用协议的味道对于这个问题不是正确的方法。 @ alain-t你可以使用代码示例填写你的评论'代表班'吗? –
@CraigGrummitt swift中的所有变量(和/或常量)在使用之前必须有一些值(对于引用类型,Swift中的变量表示为类,值为引用,对于值类型,它是值self)。直接相当于null不存在的就是Swift。 var i =可选()具有默认值nil。 var j = ImplicitlyUnwrappedOptional ()给出了相同的结果(两者都是枚举'类型')....(继续下面) –
user3441734