我试图从流行的教程网站上实现面向协议的类看教程。到目前为止,我得到了一切正确的信息,但由于某种原因,其中一个属性在其他更新时未更新。 下面是代码:面向协议的编程和类Swift
protocol Paintable : class {
var primaryBodyColor : String{get set}
var secondaryBodyColor : [String]? {get set}
func paint(newPrimaryColor : String, newSecondaryColor : [String]?)
}
extension Paintable {
var primaryBodyColor : String {
get {
return "Black"
}
set {
}
}
}
protocol Wheeled {
var numberOfWheels : Int {get set}
}
extension Wheeled {
var numberOfWheels : Int {
get {
return 4
}
set {
}
}
}
protocol EngineSize {
var engineSizeCC : Int {get set}
}
extension EngineSize {
var engineSizeCC : Int {
return 2300
}
}
class Honda : Transport, Paintable, Wheeled, EngineSize {
var secondaryBodyColor : [String]?
var engineSizeCC : Int
//We can also override default initializer of protocol, here we are going to instantiate with our initializer
init(engineSizeCC : Int){
self.engineSizeCC = engineSizeCC
}
func paint(newPrimaryColor: String, newSecondaryColor: [String]?) {
primaryBodyColor = newPrimaryColor
secondaryBodyColor = newSecondaryColor
}
}
var civic = Honda(engineSizeCC: 400)
civic.primaryBodyColor
civic.passengerCapacity
civic.numberOfWheels
civic.engineSizeCC
civic.paint("blue", newSecondaryColor: ["Red","Purple"])
civic.primaryBodyColor -> "Black"
civic.secondaryColor -> ["Red"], ["Purple"]
我遇到的问题是primaryBodyColor保持“黑”即使我被称为“油漆”功能设置主色为“蓝”和辅色。
我是新的协议oreinted编程,所以我会感谢帮助解决这个问题。
你需要在'Honda'实现'primaryBodyColor'因为'Paintable'默认的实现是不正确的。 – Sulthan
@Sulthan我不关注。 paint方法在secondaryBodyColors中工作,但不在primaryBodyColor中。我将不胜感激,如果你告诉我如何解决* paint方法中的问题* – Rosh