菜鸟教程小白 发表于 2022-12-12 10:08:30

ios - 面向协议(protocol)的编程和类 Swift


                                            <p><p>我正在尝试从流行的教程网站上实现面向协议(protocol)的类(class)观看教程。到目前为止,我的一切都是正确的,但由于某种原因,其中一个属性没有更新,而其他属性则更新了。
这是代码:</p>

<pre><code>protocol Paintable: class {
    var primaryBodyColor : String{get set}
    var secondaryBodyColor : ? {get set}

    func paint(newPrimaryColor : String, newSecondaryColor : ?)
}


extension Paintable   {
    var primaryBodyColor : String {
      get {
            return &#34;Black&#34;
      }
      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 : ?
    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: ?) {
      primaryBodyColor = newPrimaryColor
      secondaryBodyColor = newSecondaryColor
    }
}

var civic = Honda(engineSizeCC: 400)
civic.primaryBodyColor
civic.passengerCapacity
civic.numberOfWheels
civic.engineSizeCC

civic.paint(&#34;blue&#34;, newSecondaryColor: [&#34;Red&#34;,&#34;Purple&#34;])
civic.primaryBodyColor -&gt; &#34;Black&#34;
civic.secondaryColor -&gt; [&#34;Red&#34;], [&#34;Purple&#34;]
</code></pre>

<p>我遇到的问题是primaryBodyColor 保持“黑色”,即使我调用“paint”函数将主色设置为“蓝色”和辅助色。 </p>

<p>我是面向协议(protocol)编程的新手,因此我将感谢您对解决此问题的帮助。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>Extensions 不能存储属性,这也许是你在 <code>primaryBodyColor</code> 的 setter 中没有任何代码的原因。 <code>primaryBodyColor</code> 的实现需要在结构/类中,就像您对 <code>seondaryBodyColor</code> 所做的那样。因此,如果在 Honda 类中的该行之前包含以下行,您的代码将按预期工作......</p>

<pre><code>var primaryBodyColor = &#34;black&#34;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 面向协议(protocol)的编程和类 Swift,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34774974/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34774974/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 面向协议(protocol)的编程和类 Swift