2016-07-27 143 views
0

我想快速比較對象的類型。 我有一個函數,它將NSError的對象作爲參數。它應該返回一個自定義字符串。對象的快速檢查類型

它看起來像這樣:

static func getLocalizedErrorText(error: NSError) -> String{ 
    switch error { 
     case is NoConnection: //class NoConnection: NSError 
      return "....." 
     ... 
} 

但隨着預期的功能無法正常工作。我認爲主要的問題是這個例子不起作用:

var dummy = MySubError() //class MySubError: MyBaseError 
var dummy2: MyBaseError? 
dummy2 = MySubError() 

if dummy.dynamicType == MySubError.self { 
     //This will work 
} 

if dummy2.dynamicType == MySubError.self { 
     //This will not work 
} 

我該如何檢查參數得到哪種類型?

回答

2

您可以檢查使用

if error is MySubError { 
    // do stuff 
} 

你也可以做一個可選的演員陣容,這會成功一個類型,如果類型匹配或返回nil,如果不是:

let subError = error as? MySubError 

你也可以在guard謂語或if let語句中使用:

if let subError = error as? MySubError { 
    // do stuff 
} 

guard let subError = error as? MySuberror else { return }