<bdo id='1HZHf'></bdo><ul id='1HZHf'></ul>

    <small id='1HZHf'></small><noframes id='1HZHf'>

    1. <tfoot id='1HZHf'></tfoot>
    2. <i id='1HZHf'><tr id='1HZHf'><dt id='1HZHf'><q id='1HZHf'><span id='1HZHf'><b id='1HZHf'><form id='1HZHf'><ins id='1HZHf'></ins><ul id='1HZHf'></ul><sub id='1HZHf'></sub></form><legend id='1HZHf'></legend><bdo id='1HZHf'><pre id='1HZHf'><center id='1HZHf'></center></pre></bdo></b><th id='1HZHf'></th></span></q></dt></tr></i><div id='1HZHf'><tfoot id='1HZHf'></tfoot><dl id='1HZHf'><fieldset id='1HZHf'></fieldset></dl></div>

      <legend id='1HZHf'><style id='1HZHf'><dir id='1HZHf'><q id='1HZHf'></q></dir></style></legend>
    3. 为什么 Swift 初始化器不能在其超类上调用便利初始化器?

      时间:2023-09-08

      <small id='tANjU'></small><noframes id='tANjU'>

          1. <i id='tANjU'><tr id='tANjU'><dt id='tANjU'><q id='tANjU'><span id='tANjU'><b id='tANjU'><form id='tANjU'><ins id='tANjU'></ins><ul id='tANjU'></ul><sub id='tANjU'></sub></form><legend id='tANjU'></legend><bdo id='tANjU'><pre id='tANjU'><center id='tANjU'></center></pre></bdo></b><th id='tANjU'></th></span></q></dt></tr></i><div id='tANjU'><tfoot id='tANjU'></tfoot><dl id='tANjU'><fieldset id='tANjU'></fieldset></dl></div>

              • <bdo id='tANjU'></bdo><ul id='tANjU'></ul>
                  <tbody id='tANjU'></tbody>
                <tfoot id='tANjU'></tfoot>
                <legend id='tANjU'><style id='tANjU'><dir id='tANjU'><q id='tANjU'></q></dir></style></legend>

              • 本文介绍了为什么 Swift 初始化器不能在其超类上调用便利初始化器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                考虑两个类:

                class A {
                    var x: Int
                
                    init(x: Int) {
                        self.x = x
                    }
                
                    convenience init() {
                        self.init(x: 0)
                    }
                }
                
                class B: A {
                    init() {
                        super.init() // Error: Must call a designated initializer of the superclass 'A'
                    }
                }
                

                我不明白为什么不允许这样做.最终,每个类的指定初始化程序都会使用它们需要的任何值来调用,那么为什么我需要在 Binit 中通过为 指定默认值来重复自己x 再次,当 A 中的方便 init 可以正常工作?

                I don't see why this isn't allowed. Ultimately, each class's designated initializer is called with any values they need, so why do I need to repeat myself in B's init by specifying a default value for x again, when the convenience init in A will do just fine?

                推荐答案

                这是 Swift Programming Guide 中指定的Initializer Chaining"规则的第 1 条,内容如下:

                This is Rule 1 of the "Initializer Chaining" rules as specified in the Swift Programming Guide, which reads:

                规则 1:指定初始化程序必须从他们的直接超类.

                Rule 1: Designated initializers must call a designated initializer from their immediate superclass.

                https://developer.apple.com/库/内容/文档/Swift/Conceptual/Swift_Programming_Language/Initialization.html

                强调我的.指定初始化器不能调用便利初始化器.

                Emphasis mine. Designated initializers cannot call convenience initializers.

                有一个图表与规则一起展示了允许哪些初始化程序方向":

                There is a diagram that goes along with the rules to demonstrate what initializer "directions" are allowed:

                这篇关于为什么 Swift 初始化器不能在其超类上调用便利初始化器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:Swift 类中的错误:在 super.init 调用时未初始化属性 - 如何初始化需要在其初始化参数中使用 self 下一篇:在 Objective-C 中分配给自己

                相关文章

              • <tfoot id='ja05l'></tfoot>
                  <bdo id='ja05l'></bdo><ul id='ja05l'></ul>
                    <i id='ja05l'><tr id='ja05l'><dt id='ja05l'><q id='ja05l'><span id='ja05l'><b id='ja05l'><form id='ja05l'><ins id='ja05l'></ins><ul id='ja05l'></ul><sub id='ja05l'></sub></form><legend id='ja05l'></legend><bdo id='ja05l'><pre id='ja05l'><center id='ja05l'></center></pre></bdo></b><th id='ja05l'></th></span></q></dt></tr></i><div id='ja05l'><tfoot id='ja05l'></tfoot><dl id='ja05l'><fieldset id='ja05l'></fieldset></dl></div>

                    <small id='ja05l'></small><noframes id='ja05l'>

                    <legend id='ja05l'><style id='ja05l'><dir id='ja05l'><q id='ja05l'></q></dir></style></legend>