LoginSignup
16
17

More than 5 years have passed since last update.

FabricでTwitterのタイムラインを表示する

Last updated at Posted at 2015-09-04

FabricでTwitterのタイムラインを表示する

[iOS]FabricでTwitterクライアントを作ったを参考にしたところ,
Fabricのバージョンが問題でコピペができなかったから,そこを修正してみる.

2015年9月4日現在,TwitterKit Referenceを元に修正.

基本的にはそのまま

AppDelegate.swiftLoginViewController.swiftはそのまま使って問題がなかった.

HomeTimelineを取得するためのクラス

基本的には元のコード
ただ,微妙に仕様変更?のせいでエラーを吐いていたので修正.

TwitterAPI.swift

import Foundation
import TwitterKit

class TwitterAPI {
    let baseURL = "https://api.twitter.com"
    let version = "/1.1"

    init() {

    }

    class func getHomeTimeline(tweets: [TWTRTweet]->(), error: (NSError)->()) {
        let api = TwitterAPI()
        var clientError: NSError?
        let path = "/statuses/home_timeline.json"
+        let params = Dictionary<NSObject, AnyObject>()
        let endpoint = api.baseURL + api.version + path
// URLRequestWithMethodのparametersがnilを許容しなくなった + 返り値がNSURLRequestをアンラップしてくれない
-        let request = Twitter.sharedInstance().APIClient.URLRequestWithMethod("GET", URL: endpoint, parameters: nil, error: &clientError)
        let request: NSURLRequest! = Twitter.sharedInstance().APIClient.URLRequestWithMethod("GET", URL: endpoint, parameters: params, error: &clientError)
        if request != nil {
            Twitter.sharedInstance().APIClient.sendTwitterRequest(request) {(response, data, err) in
                if err == nil {
                    var jsonError: NSError?
-                    let json: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &jsonError)
+                    let json: AnyObject? = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &jsonError)
                    if let jsonArray = json as? NSArray {
-                        tweets(TWTRTweet.tweetsWithJSONArray(jsonArray) as [TWTRTweet])
+                        tweets(TWTRTweet.tweetsWithJSONArray(jsonArray as! [AnyObject]) as! [TWTRTweet])
                    }
                } else {
-                    error(err)
+                    error(err!)
                }
            }
        }
    }

}

TimelineをTableViewで表示

基本的にはそのままで大丈夫.1箇所だけエラーを吐く場所があるから修正.
ただ,修正の仕方が正しいのかは微妙.とりあえず動くからいいかな的な感じです.

TimelineViewController.swift

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
-        let tweet = tweets[indexPath.row]
+        let tweet = tweets[indexPath.row] as TWTRTweet!

        prototypeCell?.configureWithTweet(tweet)

-        if let height = prototypeCell?.calculatedHeightForWidth(self.view.bounds.width) {
+        let height = TWTRTweetTableViewCell.heightForTweet(tweet, width: self.view.bounds.width)
+        if !height.isNaN {
            return height
        } else {
            return tableView.estimatedRowHeight
        }
    }

いろいろな記事とかを読んでもどうもOptional型とDelegateがピンと来ない,,,
ユースケースがわからないのが決定打だなー.
どうにかしないと.

16
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
17