2015-03-31 85 views
1

我創建一個使用API​​,例如着想的應用程序,讓我們只說Twitter的API,因爲它是一個大多數人都熟悉和但這並沒有真正的問題本該API的使用和在哪裏JSON結果來自於。使用SwiftyJSON讀取結果的oAuth?

所以使用無安全API,我只能運行下面的代碼:

let urlPath = "http://mySimpleApi.com/results.js" 
let url: NSURL = NSURL(string: urlPath)! 
let session = NSURLSession.sharedSession() 
let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in 

    if error != nil { 
     // If there is an error in the web request, print it to the console 
     println(error.localizedDescription) 
    } 

    var err: NSError? 
    var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary 
    if err != nil { 
     // If there is an error parsing JSON, print it to the console 
     println("JSON Error \(err!.localizedDescription)") 
    } 

    let json = JSON(jsonResult) 




    let userName:JSON = json["user"]["name"] 
    let userNameString = userName.string! 
    println(userNameString) 



}) 
task.resume() 

結果在一個JSON格式返回和程序代碼上面的成功打印出結果的用戶名。也許我應該快速向你展示JSON的格式,以便你知道你在看什麼。

{ 
    "user" : 
    { 
    "name": "Bob", 
    "login": "bob2006", 
    "password": "bobsEncryptedPassword", 
    } 
} 

因此,當下面的代碼運行時,我在控制檯中返回了名爲「Bob」的名稱;正是我期望發生的事情。

所以,很顯然,這是戒菸簡單,我只是這樣做是爲了探索和JSON和方法進行實驗,使其與我的應用程序工作。

所以在這裏我的問題是,當我想要使用OAuth的API像Twitter的。如果我只是發送一個未經身份驗證的要求,我得到預期:

{"errors":[{"code":215,"message":"Bad Authentication data."}]} 

現在我所期待的,當我改變了我的原代碼的情況發生了,並把那給了我這個錯誤,我可以指定let userName:JSON = json["errors"][0]選擇鏈接第一個項目在errors區域。我只是假設這是一個數組,因爲它使用方括號來打開。當這不起作用時,我嘗試了let userName:JSON = json["errors"][0][message],但這沒有奏效,我得到了同樣的錯誤。錯誤突出了代碼,並說:

Thread 3: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP,subcode=0x0) 

然後在此返回控制檯:

fatal error: unexpectedly found nil while unwrapping an Optional value 
(lldb) 

我之所以這麼關心這個不工作更加理解爲什麼它不是那麼我知道當我在實際情況下玩這個遊戲時 - 顯然從twitter API中獲取錯誤信息可能沒有很大的實際應用。

最後,我只想說,當我通過瀏覽器雖然發送驗證請求,文件下載和像我一直使用的是其他JSON文件瀏覽器中不顯示。這在將它應用到應用程序時有什麼不同,還是它的工作原理完全相同,我只需要像其他任何JSON格式一樣使用它?

我知道這是一個長期的問題,但我想我已經包括了所有的相關信息。

請耐心等待我 - 我剛學,謝謝。

回答

0

更換

let userName: JSON = json["user"]["name"] 
let userNameString = userName.string! 
println(userNameString) 

let dic = json["errors"][0] 
let code = dic["code"].int 
println(code!) 

let msg = dic["message"].string 
println(msg!) 

你的第二個例子。

+0

奇妙的是,這似乎有竅門!謝謝 – cross 2015-03-31 14:58:12