2016-08-18 13 views
2
# Let's say I've got the following typealias 
public typealias DateRange = (from: NSDate?, to: NSDate?) 

# And use it here 
var selectedDateRange: DateRange = (nil, nil) 

パターンマッチングを使用して値を取得し、パターンマッチングを使用してアンラップすることはできますか?nil以外のパターン一致

# I can check vs. `nil` like so: 

if case (nil, nil) = segmentControl.selectedCustomDateRange { 
    print("Damn, nil!") 
} 

# And I want something shorter than 
if let from = segmentControl.selectedDateRange.from, 
    let to = segmentControl.selectedDateRange.to 
{ 
    model.setPeriod(from, to: to) 
} 

お勧めはありますか?

答えて

3

あなたは、パターンマッチングとオプションのパターン x?ifを使用することができます。

上記と同様
if case let (from?, to?) = selectedDateRange { 
    model.setPeriod(from, to: to) 
} 
+0

ああ!ありがとうございました。私は '(from:NSDate ?, to:NSDate?)'のようなバリエーションを試しましたが、それはうまくいきませんでした。 – netigger

1

が、別の...

guard case let (from?, to?) = selectedDateRange else { 
    print("Damn, at least one nil!") 
    return 
} 
model.setPeriod(from, to: to)} 
+0

これもありがとうございます。異なる状況では異なる解決策が必要であり、場合によっては警備員が優先されます。 – netigger

関連する問題