2015-12-02 26 views
3

我一直在使用SwiftyDropbox,並且遇到了一個好奇的錯誤問題。具體來說,我不確定如何處理收到響應後提供的閉包回調中的錯誤,以便我可以獲取相關的值。如何訪問SwiftyDropbox錯誤的關聯值?

例如,對於Dropbox.authorizedClient.filesListFolder完成處理器提供了

CallError<(Files.ListFolderError)>? 

的工作。我將如何去檢查它是否是

CallError.HTTPError 

,這樣我就可以得到HTTP錯誤代碼了嗎?現在我只是從錯誤的.description中吸取這些信息,但似乎並不是正確的方式。

這是我試過的。我懷疑我沒有理解涉及到的泛型。

Xcode Screenshot

client.filesListFolder(path: "", recursive: false).response({ (listFolderResult, listFolderError) -> Void in 

    switch listFolderError { 
    case let .HTTPError(code, message, requestId): 
     print("http error") 
    default: 
     print("not a http error") 
    } 

枚舉案 'HTTPError' 類型不被發現「CallError?

+1

交聯與Dropbox的API論壇:https://www.dropboxforum.com/hc/en-us/community /職位/ 203738193-SwiftyDropbox-錯誤處理。 – smarx

回答

2

這裏的問題是我們試圖打開一個可選項。這個簡單的例子強調了完全相同的問題:「富」

enter image description here

enum Foo { 
    case a 
    case b 
} 

let x: Foo? = nil 

switch x { 
case .a: 
    print("a") 
case .b: 
    print("b") 
} 

枚舉情況下,「A」未找到類型

我們可以切換自選因爲Optional本身就是一個Enum,有兩種情況:NoneSome(T)

所以,當我們切換可選,斯威夫特預計一些這樣的代碼:

switch someOptional { 
case .Some(someValue): 
    print("do some things") 
case .None: 
    print("someOptional was nil") 
} 

但是這可能不一定是特別有用的使用。我們有一個可選的枚舉,並且最終,如果我們在交換機中處理了可選項,我們只需要嵌套switch語句。相反,我們應該處理我們的可選在處理自選的正常斯威夫特方式:

if let error = listFolderError { 
    switch error { 
    case let .HTTPError(code, message, requestID): 
     print("http error") 
    default: 
     print("some other error") 
    } 
} else { 
    print("there was no error") 
}