[英]Why can Apple declare optional protocol funcs without @objc, and unowned optional variables, but I can't?
[英]Why can I declare a variable without writing optional mark?
首先,我認為我的問題與“快速選擇什么”的問題不同。 因為我在問為什么我能做到這一點,而不是這個。
我是新手。 當我今晚學習這種神話般的語言時,我遇到了一個問題,我從未在編程語言中看到過這個標記 - “ ? ”。 我搜索了一會兒。 我知道現在有什么可選綁定。
但現在我有了一個新問題。 當我想聲明一個非可選的變量時。 我可以寫這個語法:
var friend: String
但我寫不出來:
var friend: String = nil
要聲明一個nil的變量,我只能使用optional:
var friend: String? = nil
讓我們看看第一段代碼。 當剛聲明新的變量朋友時 ,它的值是nil,對吧? 因為我沒有為它分配任何價值。 但是根據可選的定義,比如第二段和第三段代碼,我們不能將nil分配給非可選變量。
所以我的問題是為什么我可以聲明一個沒有可選標記但沒有初始值的變量。 這個問題可能很簡單,但我真的不知道為什么會這樣。
提前致謝!
Swift允許您聲明一個非可選變量或常量而不在聲明中初始化它,但您必須在使用它之前為其賦值。 變量或常量的值不是 nil(非選項永遠不能為nil) - 它根本沒有定義的值。 基本上你說你稍后會給它一個值,可能是基於計算結果或if語句。
如果您嘗試使用非可選變量或常量而不首先為其分配值,Swift將給出編譯時錯誤。
您設置的第一個值是帶有字符串類型的未初始化變量。
編程中非常常見的模式是使操作可能返回值,也可能不返回值。 在某些語言中,如javascript,當遇到空值時,只要我們的程序不依賴於該值繼續,我們的程序就會繼續運行。 在其他語言中,例如java,null值可能導致NullPointerException並導致程序崩潰。
Swift解決這個問題的方法是選項。 默認情況下,如果我們定義一個沒有值的變量,編譯器會抱怨。 那么,為了聲明一個在運行時可能有或沒有值的值,我們需要添加一個? 這被稱為“在可選中包裝我們的值”。 這是因為我們確實將我們的值包裝在Swifts可選類型中,從而賦予它價值。 為了更好地了解最新情況,我們可以看看Swifts Optional枚舉的方式。
enum Optional<T> {
case None // has no value
case Some(T) // has some value
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.