2017-07-26 11 views
1

私の理解は、「それ?と 'として!'演算子はダウンキャスト用であり、アップキャスティング、曖昧さ回避、ブリッジング、パターンマッチングのための 'as'です。しかし、パターンマッチングの際に、 'any'型の '事物'は変換され、例えば - someIntとしてintに変換されます。なぜ構文は「as」ではないのですか?代わりに 'として'?この場合、パターンマッチングが型キャストと異なるのはなぜですか?パターンマッチングswitchステートメントでパターンマッチングとタイプキャスティングの違い

var things = [Any]() 

things.append(0) 
things.append(0.0) 
things.append(42) 
things.append(3.14159) 
things.append("hello") 
things.append((3.0, 5.0)) 
things.append({ (name: String) -> String in "Hello, \(name)" }) 

for thing in things { 
switch thing { 
case 0 as Int: 
    print("zero as an Int") 
case 0 as Double: 
    print("zero as a Double") 
case let someInt as Int: 
    print("an integer value of \(someInt)") 
case let someDouble as Double where someDouble > 0: 
    print("a positive double value of \(someDouble)") 
case is Double: 
    print("some other double value that I don't want to print") 
case let someString as String: 
    print("a string value of \"\(someString)\"") 
case let (x, y) as (Double, Double): 
    print("an (x, y) point at \(x), \(y)") 
    case let stringConverter as (String) -> String: 
     print(stringConverter("Michael")) 
    default: 
     print("something else") 
} 
} 

答えて

2

thingのタイプ一致そのcaseで指定されたタイプと、caseのみアクセスされます。対応するキャストは失敗しません(それ以外の場合はcaseになりません)。as?またはas!でキャストのアンラッピングを心配する必要はありません。

関連する問題