2015-10-15 113 views
19

我想創建一個錯誤對象以顯示給用戶。Swift創建NSError對象

let userInfo: [NSObject : AnyObject] = 
    [ 
    "NSLocalizedDescriptionKey" : NSLocalizedString("Unauthorized", comment: ""), 
    "NSLocalizedFailureReasonErrorKey" : NSLocalizedString("Unauthorized", comment: "") 
    ] 
let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: httpResponse.statusCode, userInfo: userInfo) 
print("Error in Post: \(err.localizedDescription)") 

不幸的是,輸出是:

Error in Post: The operation couldn’t be completed.(ShiploopHttpResponseErrorDomain error 401.) 

我希望能夠展示給他應該激活他的帳戶的用戶。有任何想法嗎??

回答

21

看起來你想要的(見字典鍵):

斯威夫特2

let userInfo: [NSObject : AnyObject] = 
[ 
    NSLocalizedDescriptionKey : NSLocalizedString("Unauthorized", value: "Please activate your account", comment: ""), 
    NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "") 
] 

斯威夫特3

let userInfo: [AnyHashable : Any] = 
      [ 
       NSLocalizedDescriptionKey : NSLocalizedString("Unauthorized", value: "Please activate your account", comment: "") , 
       NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "") 
     ] 

然後創建錯誤對象兩者都是wift 2或3這樣的:

let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: 401, userInfo: userInfo) 
println("Error in Post: \(err.localizedDescription)") 

NSLocalizedDescriptionKey和NSLocalizedFailureReasonErrorKey是全局字符串變量,以及用戶信息的字典內的密鑰。該值是從指定什麼稍有不同:

println(NSLocalizedDescriptionKey) //prints "NSLocalizedDescription" 
println(NSLocalizedFailureReasonErrorKey) //prints "NSLocalizedFailureReason" 

,我覺得是個好習慣通過右鍵單擊(在這種情況下NSError)類和選擇看文檔「跳轉到」 Xcode的範圍內。各種問題都可以這樣回答。 :)

+0

這也可能是有意義從NSError繼承,然後重寫爲localizedDescription吸氣創建自己的錯誤類。 – ProgrammierTier

+0

事情是我應該子類NSError能夠定製「NSLocalizedDescriptionKey」來顯示我的自定義消息。我是Swift和編程新手。所以我將不得不挖掘知道如何實現這個:) thx爲您的迴應 –

5

這裏是一個具有一些附加堆棧跟蹤信息來創建NSError對象我Helper方法:

class Helper { 

    static let errorDomain = "com.example.error" 
    static let errorFuncKey = "com.example.error.function" 
    static let errorFileKey = "com.example.error.file" 
    static let errorLineKey = "com.example.error.line" 

    static func error(_ message: String, record: Bool = true, function: String = #function, file: String = #file, line: Int = #line) -> NSError { 

     let customError = NSError(domain: errorDomain, code: 0, userInfo: [ 
      NSLocalizedDescriptionKey: message, 
      errorFuncKey: function, 
      errorFileKey: file, 
      errorLineKey: line 
     ]) 

     // if (record) { 
     //  customError.record() 
     // } 

     return customError 
    } 
} 

用法:

let error = Helper.error(NSLocalizedString("Unauthorized", comment: "Account not activated")) 

通知 3在輔助類註釋行,我用它來記錄Crashlytics中的錯誤,您可以取消上面的註釋並使用以下擴展名記錄Crashlytics中的錯誤:

extension NSError { 

    func record() { 
     Crashlytics.sharedInstance().recordError(self) 
    } 

} 
+0

爲什麼downvote,上面的代碼不會創建NSError對象,isnt?,你怎麼解決這個問題(如果確實有一個),而不知道爲什麼該人投票了嗎?我從來沒有投下他人對我回答的問題的回答,但我卻投了其他人的票。不管怎麼說,多謝拉! – AamirR

5

創建斯威夫特3一個非常簡單的錯誤:

let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey : "Object does not exist"])