클래스를 사용하여 트위터 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)")
}
}
}
}
총결산
Reference
이 문제에 관하여(클래스를 사용하여 트위터 API 모듈 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/h_nagami/items/3308023d48a03bd61338텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)