2016-03-03 40 views
10

看一看這種說法from Apple document爲什麼你會使用一個可選類型作爲一個常量的值?

let optionalInt: Int? = 9 

爲什麼你會使用Int?作爲這個常數的類型?你知道它不能是nil,因爲你正在給它賦值9?一個可選類型的目的(據我所知)是能夠容納nil.在這個聲明中沒有必要optionalInt持有nil。有人可以解釋嗎?

+1

你能鏈接蘋果文檔的頁面,你發現那行代碼嗎?這會給我們一個更有效回答的上下文。 – RaphBlanchet

+1

@RaphBlanchet我找到了; [它用作單線例如引入時選配](https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson1.html#//apple_ref/doc/uid/TP40015214-CH3-SW1 )。 –

+0

以下是該文檔的鏈接:https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson1。html#// apple_ref/doc/uid/TP40015214-CH3-SW1 搜索「optionalInt」。這只是一個例子,但我希望這些例子會有意義。 –

回答

5

我發現了一個你可能會用到的情況。這是一個有點延伸,但我們走了。

使用 let x: Int? = whatever

的一個原因是,如果你有一個重載函數,這些函數的參數是不同的類型,只是因爲一個是可選的。例如:

func doSomething(x: Int) 
{ 
    print("\(x) is an Int") 
} 

func doSomething(x: Int?) 
{ 
    print("\(x) is an optional") 
} 

如果要確保調用第二個重載,則需要明確將該參數設置爲可選,例如,

let y = 5 
doSomething(y) // prints 5 is an Int 

let z: Int? = 6 
doSomething(z) // prints Optional(6) is an optional 

我還沒有在現實生活中看到過這樣的事情。

至於蘋果的文檔,它只是一個簡單的例子。

+1

這有點誇張,但在我們找到使用let x:Int的更好理由之前, =無論如何,這是迄今爲止最好的答案。也許,這沒有什麼好的理由。蘋果只是舉了一個不好的例子。 –

1

一對夫婦的想法:

假設你有一個方法

func foo(xValue: Int?)->Int? { 
    // some logic 
} 

也許你想定義常量的方法定義完全匹配。

let optionalInt: Int? = 9 
let fooVal = foo(optionalInt) 

或(改變你的初始let語句),該常量的值由返回一個可選

let optionalInt: Int? = foo(nil) 
+0

在上面的foo示例中,您可以用int常量調用foo嗎? 讓nonOptionalInt:INT = 9 讓fooVal = FOO(nonOptionalInt) 如果你不能調用foo這樣,那麼AgRizzo已經提供了聲明常量的值作爲可選的正當理由。有人可以評論嗎? –

+0

我剛剛進行了一項實驗。對於函數foo(xValue:Int?),如果您將foo的Type Int值作爲參數傳遞,它仍然有效。所以,AgRizzo沒有爲我的問題提供一個合理的理由。 –

+0

@AndrewF。 - 我確實給你提供了兩個理由。你可能不喜歡我的理由,但你沒有證明我的理由是無效的。你證明了一個Int可以被隱式轉換爲一個可選的Int。 – AgRizzo

3

我認爲蘋果文檔的這一特定部分是爲了簡單地說明一個函數確定選擇權的概念,沒有別的。他們可能會使用let出於良好實踐,始終從聲明let屬性/變量開始,只有在明確需要更改其值時纔將其切換爲var

至於爲什麼要聲明let foo: Int? = 9而不僅僅是let foo = 9。那麼,我真的無法想象它會在哪裏需要。即使某些API預期Int?,那麼您仍然可以將Int類型的變量傳遞給此類API,並且Swift會爲您隱式轉換它。也許,如果你將它傳遞給一個通用函數,並且你想要使用該通用版本的Int?,那麼你會想要這樣做,但它已經太學術了,已經無法實際使用。

+0

這是正確的答案。當你知道這個值永遠不會是'nil'時,創建一個可選項永遠不會更好。即使是其他答案中的這個牽強的例子,在需要的時候也可以通過明確的演員表達更好。 – Sulthan

相關問題