Help us understand the problem. What is going on with this article?

swiftでtwitterアプリを作ったときにハマったこと

More than 5 years have passed since last update.

Swiftを使ってTwitterアプリを作ったときにハマったことをメモに残します。
※自分の備忘録と今後開発してみたいという方の参考になると嬉しいです。

Twitter アプリの作成には、ツイッターアプリを作ろう。誰でもわかるiPhone開発講座を参考にしました。

Twitter.hのインポート

Swiftでは、headerをインクルードする代わりにframeworkをインポートする

// Objective-Cの場合
#include <Twitter/Twitter.h>
// Swiftの場合
import Twitter

ブロックを引数に渡す

// Objective-Cの場合
[accountStore requestAccessToAccountsWithType:twitterAccountType
              withCompletionHandler:^(BOOL granted, NSError *error)
     {
         if (!granted) {
             NSLog(@"ユーザーがアクセスを拒否しました。");
         }else{
             NSLog(@"ユーザーがアクセスを許可しました。");
         }
     }];
// Swiftの場合
// 一度 ACAccountStoreRequestAccessCompletionHandler で handlerを宣言しないとエラーになる
// そのうち調べよう
let handler: ACAccountStoreRequestAccessCompletionHandler =
{granted, error in
    if(!granted) {
        NSLog("ユーザーがアクセスを拒否しました。")
    } else {
        NSLog("ユーザーがアクセスを許可しました。")
    }
}
//
accountStore.requestAccessToAccountsWithType(twitterAccountType, handler)
// Swiftの場合(エラーが発生)
// Could not find an overload for 'requestAccessToAccountsWithType' that accepts the supplied arguments が発生する
accountStore.requestAccessToAccountsWithType(twitterAccountType, {(granted:Bool, error:NSError) in
    if(!granted) {
        NSLog("ユーザーがアクセスを拒否しました。")
    } else {
        NSLog("ユーザーがアクセスを許可しました。")
    }
})

Type Cast

// Objective-Cの場合
ACAccount *account = [twitterAccounts objectAtIndex:0];
// Swiftの場合
let account = twitterAccounts[0] as ACAccount

TWRequest で構文エラー

TWRequestのインスタンスを作成するコードを書いた時にエラーが発生して数時間ハマってしまいました。
Developer Forumsに質問して原因を教えて頂きました。

// Extra argument in callが発生するパターン
let url = NSURL.URLWithString("http://api.twitter.com/1/statuses/home_timeline.json")
let request = TWRequest(url, nil, TWRequestMethodGET) //ERROR

urlという変数名が1つ目の引数と被ってしまったことが問題だったようです。

// Could not find an overload for 'init' that accepts the supplied argumentsが発生するパターン
let url = NSURL.URLWithString("http://api.twitter.com/1/statuses/home_timeline.json")
let request = TWRequest(URL: url, parameters: nil, requestMethod: TWRequestMethodGET) // ERROR

3つ目のパラメータにTWRequestMethodGET を指定したのが問題でした。

これらを踏まえて動くようになったコードです。

let url = NSURL.URLWithString("http://api.twitter.com/1/statuses/home_timeline.json")
et request = TWRequest(URL: url, parameters: nil, requestMethod: TWRequestMethod.GET)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした