2016-11-09 63 views
1

我創建一個類型別名:Array的count屬性是可選的嗎?

typealias areasOfStudyType = Array<Dictionary<String, String>> 

然後,創建一個可選變量:

var areasOfStudy : areasOfStudyType? = nil 

我需要使用的數組的元素的數量,以將它們放在一個表格視圖所以我輸入:

areasOfAStudy?.count 

我明白,如果areasOfStudynil這行代碼不會嘗試,因爲我得到計數​​的值m使用可選的鏈接。但是當它不是nil時,它將返回Int

然而,編譯器會抱怨,我還沒有拆開包裝可選,並建議I型:

(areasOfAStudy?.count)! 

爲什麼areasOfAStudy?.count可選?當我看陣列的參考文檔我讀:

計數
元素的數組存儲數量。

宣言
變種數:詮釋{}獲得

+4

可選鏈接返回一個可選... –

+0

太棒了!你指出了正確的問題。 Swift編程語言書中的內容如下: – Azul

+0

「爲了反映可選鏈接可以在無值上調用的事實,即使正在查詢的屬性,方法或腳標返回,可選鏈接調用的結果也始終爲可選值非可選值「 摘錄自:Apple Inc.」Swift編程語言(Swift 3)「.iBooks。 https://itun.es/ca/jEUH0.l – Azul

回答

1

計數不可選的,但該陣列。因此areasOfAStudy?.count是可選的,因爲當areaOfAStudy是零計數時永遠不會被調用,所以它評估爲零。

var areasOfAStudy: [String]? = nil 
//This evaluates to nil because areasOfAStudy is nil. The type of a is Int? 
var a = areasOfAStudy?.count 
print(type(of:a)) 
+0

這也回答了我的問題。謝謝! – Azul

1

這只是可選的鏈接工作方式。

如果您有let value = nonOptional.property,假設propertynonOptional不是可選的,那麼value將不會是可選的。

但是,如果你這樣做let value = optionalObject?.property即使property沒有定義爲可選,您可以通過可選的鏈接訪問它(這是什麼?.手段),這樣因爲optionalObject是可選的,那麼value是可以選擇的。因爲optionalObject可能是nil