2016-07-27 120 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 }