2017-10-06 54 views
1

我有一個需要轉換爲整數數組的字符串數組。For Case中的可選語句

import Foundation 

let strings = ["One", "2", "Three", "4", "Five", "6"] 

let integers = strings.map{Int($0)} 

// :Using Optional Binding in a FOR Case Statement 
for case let val? in integers { 
    print("\(val)") 
} 

在上面的For Case語句中,我們使用[Int?]數組中的Optional值進行模式匹配。我對這個概念的理解是,由於數組是一個可選的int數組,因此返回的值在使用它們之前必須先展開,但是我們在For Case語句中使用可選綁定,因此值將解包到變量「val 」。但變量「val」本身似乎是一個可選變量,這意味着該值需要在print語句中再次解包,但是會給出錯誤:「不能強制展開非可選類型'Int'的值」,這意味着那「val」不是一個可選變量。

這真是令人困惑。有人可以解釋爲什麼變量「val」不是一個可選變量,當我們使用「?」時用它 !!

謝謝, Ujj​​wal

回答

2

val?是 「可選模式」 和用於.some(val)的快捷方式。 如果該表達式不是nil, ,則匹配可選表達式,然後將val綁定到解包的匹配表達式的值。

Optional Patterns

An optional pattern matches values wrapped in a some(Wrapped) case of an Optional<Wrapped> enumeration. Optional patterns consist of an identifier pattern followed immediately by a question mark and appear in the same places as enumeration case patterns.

因此val是一個非可選Int,你觀察到。

0

當您使用for case時,您有條件地迭代集合。它只會迭代和處理與模式匹配的元素。如果您描述的是val?換句話說就是optional