FabricでTwitterのタイムラインを表示する
[iOS]FabricでTwitterクライアントを作ったを参考にしたところ,
Fabricのバージョンが問題でコピペができなかったから,そこを修正してみる.
2015年9月4日現在,TwitterKit Referenceを元に修正.
基本的にはそのまま
AppDelegate.swift
,LoginViewController.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がピンと来ない,,,
ユースケースがわからないのが決定打だなー.
どうにかしないと.