클래스를 사용하여 트위터 API 모듈 만들기

18093 단어 Swift

Class의 해설과 장점


그런 다음 Class를 사용하여 Twitter 서비스 모듈을 제작합니다.
지금까지 ViewController와 UI 위젯 등은 자연적으로 사용되었으나 이번에는 이 등급을 사용해 트위터 API를 사용하는 모듈을 제작할 예정이다.
Swift 클래스의 특징으로서 C++나 Objective-C처럼 제목 파일을 구분할 필요가 없습니다.한 서류에 모두 쓸 수 있다.또한 클래스에는 속성이 있을 수 있다.학급이 속성을 가지게 함으로써 필요할 때 일부러 데이터를 유지하거나 얻는 것을 줄일 수 있다.

왜 모듈화했을까요? 지금까지는 화면별로 같은 프레임워크를 읽거나 사용자 데이터를 전달해야 했고, 새로운 시야류를 설치할 때마다 같은 물건을 사용하기 위해 같은 설치를 하는 경우가 많았습니다.
모듈화를 통해 각 보기에서 동일하게 구현되지 않더라도 모듈을 불러와 같은 방식으로 API를 사용해 코드량과 비용을 줄일 수 있다.

Class의 개발 방법 및 구현 사용


그럼 모듈 설치를 시작합니다.
import UIKit
import Accounts
import Social

class TwitterServiceManager: NSObject {
    var accountStore = ACAccountStore()
    var twAccount = ACAccount?()
    var accounts:[ACAccount]?
    var tweets = []

    func initWithId(id:Int) {
        setId(id);
    }

    func setId(id:Int)
    {
        NSUserDefaults.standardUserDefaults().setInteger(id, forKey: "TwitterUserListIndex")
    }

    func myId() -> Int
    {
        return NSUserDefaults.standardUserDefaults().objectForKey("TwitterUserListIndex")!.integerValue
    }

    func myAccount() -> ACAccount
    {
        return accountList()[myId()]
    }

    func accountList() -> [ACAccount]
    {
        return accounts!
    }

    //  Twitter APIを使ってタイムラインを取得しtweetsに保存する
    func fetchTimeline(completion:(success:Bool) -> Void)
    {
        UIApplication.sharedApplication().networkActivityIndicatorVisible = true
        let URL = NSURL(string: "https://api.twitter.com/1.1/statuses/home_timeline.json")

        let request = SLRequest(forServiceType: SLServiceTypeTwitter, requestMethod: .GET, URL: URL, parameters: nil)
        request.account = twAccount

        UIApplication.sharedApplication().networkActivityIndicatorVisible = true

        request.performRequestWithHandler { (data, response, error:NSError?) -> Void in
            UIApplication.sharedApplication().networkActivityIndicatorVisible = false

            if error != nil {
                println("Fetching Error: \(error)")
                completion(success: false)
                return
            }

            var tweetResponse: AnyObject? =  NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments, error: nil)

            if let tweetDict = tweetResponse as? Dictionary<String, AnyObject>{
                completion(success: false)
                return
            }

            self.tweets = tweetResponse as! NSArray
            completion(success: true)
        }
    }

    func fetchAccountsList(completion:(success:Bool) -> Void)
    {

        let accountType = accountStore.accountTypeWithAccountTypeIdentifier(ACAccountTypeIdentifierTwitter)
        accountStore.requestAccessToAccountsWithType(accountType, options: nil) { (granted:Bool, aError:NSError?) -> Void in

            if let error = aError {
                println("Error! - \(error)")
                completion(success: false)
                return;
            }

            if !granted {
                println("Cannot access to account data")
                completion(success: false)
                return;
            }

            self.accounts = (self.accountStore.accountsWithAccountType(accountType) as? [ACAccount])!
            completion(success: true)
        }
    }

    func sendTweet(tweet:String, completion:(success:Bool) -> Void)
    {
        let URL = NSURL(string: "https://api.twitter.com/1.1/statuses/update.json")

        if count(tweet) <= 0 {
//            var alert = UIAlertController(title: "Error", message: "Please input text", preferredStyle: UIAlertControllerStyle.Alert)
//            alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:nil))
//            self.presentViewController(alert, animated: true, completion:nil)
            completion(success: false)
            return
        }

        var params = ["status": tweet]

        // リクエストを生成
        let request = SLRequest(forServiceType: SLServiceTypeTwitter,
            requestMethod: .POST,
            URL: URL,
            parameters: params)

        // 取得したアカウントをセット
        request.account = twAccount

        // APIコールを実行
        request.performRequestWithHandler { (responseData, urlResponse, error) -> Void in

            if error != nil {
                println("error is \(error)")
                completion(success: false)
            }
            else {
                // 結果の表示
                let result = NSJSONSerialization.JSONObjectWithData(responseData, options: .AllowFragments, error: nil) as! NSDictionary
                completion(success: true)
                println("result is \(result)")
            }
        }
    }
}

총결산

  • 클래스는 UI 부품, ViewController 등의 부품을 만드는 기초
  • 사용 클래스를 만들어 네트워크 통신 또는 데이터 등에 데이터를 모으는 모듈
  • 데이터나 네트워크를 만드는 모듈을 통해 UI 또는 ViewController
  • 를 쉽게 구현할 수 있습니다.

    좋은 웹페이지 즐겨찾기