簡體   English   中英

swift 結構的空初始值設定項

[英]Empty initializer for swift structures

是否可以在沒有任何值的情況下初始化 swift 結構?

總結一下這個想法,我正在創建一個具有兩個屬性的結構,當我調用 init() 方法時,這些屬性應該被填充,但問題是,我在這個結構中有一個 function,我需要使用它,在某些情況下,不填寫結構初始值設定項中的字段。

我試過添加 init(){} function,希望它能以某種方式像 java 中的空構造函數一樣工作,但我沒有成功。

  struct Quiz {
     var pergunta: String
     var resposta: Bool

    init(pergunta: String, resposta: Bool) {
        self.pergunta = pergunta
        self.resposta = resposta
    }

    //Something like that
    init(){}


    func popularQuiz() -> Array<Quiz> {
        ...
    }
 }

有沒有辦法做到這一點,或者 swift 沒有創建空結構的選項?

最大的問題是為什么你想要一個空的測驗? 空測驗是什么意思?

撇開這些問題不談,如果所有屬性都可以被賦予默認值或者屬性是可選的,那么你只能創建一個沒有參數的初始化器。

struct Quiz {
    var pergunta: String = ""
    var resposta: Bool = false

    init(pergunta: String, resposta: Bool) {
        self.pergunta = pergunta
        self.resposta = resposta
    }

    init(){}
}

現在您的空init將起作用,因為所有屬性都已完全初始化。 但那是你真正想要的嗎?

獲得相同結果的另一種方法是在主初始化器的參數上使用默認值。

struct Quiz {
    var pergunta: String
    var resposta: Bool

    init(pergunta: String = "", resposta: Bool = false) {
        self.pergunta = pergunta
        self.resposta = resposta
    }
}

現在你可以打電話:

Quiz()
Quiz(pergunta: "Some question", resposta: "Some Answer")
Quiz(pergunta: "Question with no answer")

這些中的任何一個仍然會導致所有屬性被初始化。

最后一個選項是使屬性可選而不是使用特殊的默認值。 但這會在以后增加更多的麻煩。

struct Quiz {
    var pergunta: String?
    var resposta: Bool?

    init(pergunta: String, resposta: Bool) {
        self.pergunta = pergunta
        self.resposta = resposta
    }

    init(){}
}

空的init會將屬性保留為nil 但是現在您需要正確處理各處的可選值。 再一次,那是你真正想要的嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM