[英]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.