2017-07-02 36 views
0

我在Swift 3.1文檔中看到,您可以在由逗號分隔的if語句中包含若干可選綁定,並且它的行爲與AND運算符類似。或可選綁定的條件?

假設我有兩個可選屬性,我想檢查它們中的哪一個(或兩者)不是nil,打開非零的一個或多個,然後執行一個代碼塊。使用此:

if let = property1, let = property2 { 
    // Some task to do with unwrapped property 
} 

只執行,如果兩個屬性都拆開if語句塊(AND條件)。但是對於我來說,至少有一個這樣的屬性非零即可執行if語句塊(OR條件)中的代碼就足夠了。但如果我這樣做:

if property1 != nil || property2 != nil { 
    // Some task to do with non-nil property 
} 

但是,然後我沒有non-nil屬性的unwrapped值。我希望在if語句代碼塊中有可用的解包值,以避免可選鏈接。

這將是最好的實踐和最緊湊的方式來實現這一目標?

回答

1

不幸的是,我不認爲這是可能的在一條線(如if let x = y || let z = a {})。從邏輯上講,這是沒有意義的,因爲你最終會處於一個狀態,在這個狀態下,兩個變量都將保持可選狀態(如果兩個變量都被解包,你不知道哪個變量被解包或者兩者都是)。我認爲你需要採取其他方法解決這個問題。我認爲最簡單的形式會像

if let unwrappedProperty1 = property1 { 
    handleProperty(unwrappedProperty1) 
} else if let unwrappedProperty2 = property2 { 
    handleProperty(unwrappedProperty2) 
} 

,或者你可以不喜歡

if let unwrappedProperty = property1 ?? property2 { 
    handleProperty(unwrappedProperty) 
} 

這將優先property1

1

這個怎麼樣。

if let property = property1 ?? property2 { 
    // non nil property (any one of the two) 
} 

如果property1property2都有價值property1得到優先。