2014-06-24 26 views
2

什麼時候將一個變量推斷爲Swift編譯器的隱式解包可選項?或者變量必須始終用!爲什麼要這樣對待?什麼時候將一個變量推斷爲Swift編譯器的隱式解包可選項?

+3

據我所知,只有'IBOutlets'被推斷爲隱式展開。其他所有內容都需要用'!'聲明。其被稱爲「隱式解包」的原因是因爲您可以先訪問它的屬性而不打開它。除此之外,它的行爲與Optionals – Jack

+0

的行爲相同,謝謝傑克,在IBOutlet上有用。至於它的行爲與Optional相同,它不能包含零,但是,對吧? – Boon

+1

是的它可以,它是一個「隱式解包可選」,這意味着它是一個可選 - 只是當您訪問屬性時,您不必首先打開它。多數民衆贊成在這.. – Jack

回答

1

類型推斷髮生在編譯時。將變量推斷爲隱式解包的可選項的唯一方法是爲其分配一個(直接或通過分配函數的返回值,該函數返回一個隱式解包的可選項)。

基本上,變量的「可選項」是的部分它的類型。以下變量的類型xyimplicitly unwrapped Optional Int(對於兩者),並且最重要的是,類型系統不認爲這是與「Int」相同的「相同類型」。 (雖然你可以互換與Int只要使用它,因爲它是不nil

let x: Int! = 7 

fund make_y() -> Int! { 
    return 7 
} 

let y = make_y() 
+0

奇怪的是,當您必須指定!時,它被稱爲隱式解開,它看上去應該被明確解開。 – Boon

+0

你在聲明中明確表示它,但是在整個代碼中,展開是隱含的 - 不需要!要麼 ?。 –

+1

它被稱爲隱含「解包」。在迅速只有optionals可以是零。通常你有'var x:Int? = 7'並且在'7'處,你需要寫'x!'(解開它)。通過使用「隱式解包可選」,你不必寫'x!'來訪問'7',你只需寫'x'。我寫了一個關於[這個問題]的差異的詳細解釋(http://stackoverflow.com/a/24122706/2908) – Jiaaro

相關問題