2017-06-02 64 views
0

如何使用Swift 3將數據存儲到數組中?我有以下代碼,我幾乎從Swift Guy中複製,但它不適用於此代碼。以下是我的viewDidLoad()函數:在Swift 3中顯示Facebook事件

let url = URL(string: "https://www.facebook.com/events/upcoming") 
     let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in 
      if error != nil { 
       print("ERROR") 
      } else { 
       if let content = data { 
        do { 
         let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 
         print(myJson) 
        } catch { 
         print("error") 
        } 
       } 
      } 
     } 
     task.resume() 

如何從Facebook Events頁面獲取信息?我應該提到,我擅長編碼,但在涉及到Swift時我是初學者,所以對於每行代碼的解釋會非常有幫助。謝謝!

回答

1

您請求的網址返回您嘗試解析的HTML網頁,就像它是JSON資源一樣。您必須使用Facebook Graph API和/或Facebook Swift SDK以JSON形式獲取信息。

嘗試讀取Facebook的開發者文檔,瞭解更多信息:

https://developers.facebook.com/docs/swift

https://developers.facebook.com/docs/graph-api

此外,雨燕Error對象包含的信息可以幫助你理解了什麼問題。您可以將它們打印到控制檯。試試這個:

if error != nil { 
    print(error) 
} else { 
// ... 

catch語句還設置了塊內部自身的error變量,所以你可以使用:

} catch { 
    print(error) 
} 

確保您瞭解參與創建一個Facebook應用程序的步驟:記錄在Facebook上下載應用程序,下載SDK,將SDK添加到項目中,爲您的應用程序配置SDK,在您的應用程序中登錄Facebook,然後調用Facebook Graph API以獲取信息。這些步驟都在上面提到的Facebook文檔中進行了描述。我跟iOS SDK(Objective-C的)設置項目說明啓動,然後改變你的應用程序委託和視圖控制器以下幾點:

AppDelegate.swift:

import UIKit 
import FacebookCore 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { 
     SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions) 
     return true 
    } 

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
     return SDKApplicationDelegate.shared.application(app, open: url, options: options) 
    } 

} 

ViewController.swift:

import UIKit 
import FacebookCore 
import FacebookLogin 

class ViewController: UIViewController, LoginButtonDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     if let _ = AccessToken.current { 
      loadEvents() 
     } 
     let loginButton = LoginButton(readPermissions: [ .publicProfile, .userEvents ]) 
     loginButton.center = view.center 
     loginButton.delegate = self 

     view.addSubview(loginButton) 
    } 

    func loginButtonDidCompleteLogin(_ loginButton: LoginButton, result: LoginResult) { 
     if let _ = AccessToken.current { 
      loadEvents() 
     } 
    } 

    func loginButtonDidLogOut(_ loginButton: LoginButton) { 
     // Logout handling code here 
    } 

    func loadEvents() { 
     let connection = GraphRequestConnection() 
     connection.add(GraphRequest(graphPath: "/me/events")) { httpResponse, result in 
      switch result { 
      case .success(let response): 
       print("Graph Request Succeeded: \(response)") 
      case .failed(let error): 
       print("Graph Request Failed: \(error)") 
      } 
     } 
     connection.start() 
    } 

} 

response對象將包含已解析的Facebook事件信息。

+0

是的,我嘗試過,但我並沒有真正理解它。你能提供更多的信息或示例代碼嗎? –