facebook twitter hatena line email

「Ios/swift/外部ライブラリ/Alamofire」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
 
(同じ利用者による、間の8版が非表示)
行32: 行32:
 
                     print(value)
 
                     print(value)
 
                 }
 
                 }
 +
            } else {
 +
                let alert = UIAlertView(title: "エラー", message: "通信に失敗しました", delegate: self, cancelButtonTitle: "OK")
 +
                alert.show()
 
             }
 
             }
 
         }
 
         }
行44: 行47:
  
 
==画像API例==
 
==画像API例==
-api.html
+
-php
{"cnt":2,"imgs":[{"thumbnail":"https:\/\/pbs.twimg.com\/media\/ClupGSKWEAAeOuy.jpg","name":"\u30aa\u30d0\u30de\u3055\u3093"},{"thumbnail":"https:\/\/pbs.twimg.com\/media\/ClfZX4sWEAEeJzB.jpg","name":"\u30c9\u30ed\u30a4\u30c9\u541b"}]}
+
$ret = array(
 +
  'cnt' => 2,
 +
  'imgs' => array(
 +
    array(
 +
      'thumbnail' => "https://pbs.twimg.com/media/ClupGSKWEAAeOuy.jpg",
 +
      'name' => "オバマさん",
 +
    ),
 +
    array(
 +
      'thumbnail' => "https://pbs.twimg.com/media/ClfZX4sWEAEeJzB.jpg",
 +
      'name' => "ドロイド君",
 +
    ),
 +
  ),
 +
);
 +
echo json_encode($ret);
 +
// 生成されたhtml
 +
{"cnt":2,"imgs":[{"thumbnail":"https:\/\/pbs.twimg.com\/media\/ClupGSKWEAAeOuy.jpg","name":"\u30aa\u30d0\u30de\u3055\u3093"},{"thumbnail":"https:\/\/pbs.twimg.com\/media\/ClfZX4sWEAEeJzB.jpg","name":"\u30c9\u30ed\u30a4\u30c9\u541b"}]}
  
-swift
+
-ImgInit.swift
 
  class ImgInit {
 
  class ImgInit {
 
     var name:String = ""
 
     var name:String = ""
行56: 行74:
 
     }
 
     }
 
  }
 
  }
 +
-SampleController.swift
 
  Alamofire.request(.GET, "http://localhost/api/testimgs", parameters: ["param1": "value1"]).responseJSON { response in
 
  Alamofire.request(.GET, "http://localhost/api/testimgs", parameters: ["param1": "value1"]).responseJSON { response in
 
     if response.result.isSuccess {
 
     if response.result.isSuccess {
行64: 行83:
 
         var _imgs: Array<ImgInit> = []
 
         var _imgs: Array<ImgInit> = []
 
         for img in imgs {
 
         for img in imgs {
             let _img = ImgInit(name: String(img["name"]), thumbnail: String(img["thumbnail"])) as ImgInit
+
             let name:String = img["name"] as! String
 +
            let thumbnail:String = img["thumbnail"] as! String
 +
            let _img = ImgInit(name: name, thumbnail: thumbnail) as ImgInit
 
             _imgs.append(_img)
 
             _imgs.append(_img)
 
         }
 
         }
 
         // こんな感じで取得
 
         // こんな感じで取得
 
         for _img in _imgs {
 
         for _img in _imgs {
             print(_img.name)
+
             print("name=\(_img.name), thumbnail=\(_img.thumbnail)")
            print(_img.thumbnail)
+
 
         }
 
         }
 
     }
 
     }
行76: 行96:
  
 
-出力
 
-出力
  Optional(オバマさん)
+
  オバマさん
  Optional(https://pbs.twimg.com/media/ClupGSKWEAAeOuy.jpg)
+
  https://pbs.twimg.com/media/ClupGSKWEAAeOuy.jpg
  Optional(ドロイド君)
+
  ドロイド君
  Optional(https://pbs.twimg.com/media/ClfZX4sWEAEeJzB.jpg)
+
  https://pbs.twimg.com/media/ClfZX4sWEAEeJzB.jpg
 +
 
 +
==ローディング画面実装==
 +
-LoadingProxy.swift
 +
import UIKit
 +
struct LoadingProxy {
 +
    static var myActivityIndicator: UIActivityIndicatorView!
 +
    static func set(v:UIViewController){
 +
        self.myActivityIndicator = UIActivityIndicatorView()
 +
        self.myActivityIndicator.frame = CGRectMake(0, 0, 50, 50)
 +
        self.myActivityIndicator.center = v.view.center
 +
        self.myActivityIndicator.hidesWhenStopped = false
 +
        self.myActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.White
 +
        self.myActivityIndicator.backgroundColor = UIColor.grayColor();
 +
        self.myActivityIndicator.layer.masksToBounds = true
 +
        self.myActivityIndicator.layer.cornerRadius = 5.0;
 +
        self.myActivityIndicator.layer.opacity = 0.8;
 +
        v.view.addSubview(self.myActivityIndicator);
 +
        self.off();
 +
    }
 +
    static func on() {
 +
        myActivityIndicator.startAnimating();
 +
        myActivityIndicator.hidden = false;
 +
    }
 +
    static func off() {
 +
        myActivityIndicator.stopAnimating();
 +
        myActivityIndicator.hidden = true;
 +
    }
 +
    static func checkOn() -> Bool {
 +
        if myActivityIndicator.hidden == true {
 +
            return false;
 +
        }
 +
        return true
 +
    }
 +
}
 +
-呼び出し元.swfit
 +
// api処理前にon
 +
LoadingProxy.set(self);
 +
LoadingProxy.on();
 +
// api処理後以下でoffにする
 +
if LoadingProxy.checkOn() == true {
 +
    LoadingProxy.off();
 +
}
 +
参考:http://swift-salaryman.com/uiactivityindicatorview.php

2016年7月27日 (水) 23:08時点における最新版

Alamofireとは

httpに非同期でアクセスできるライブラリ

インストール

$ vi Podfile
platform :ios, '9.0'
target 'Helloworld' do
 use_frameworks!
 pod 'Alamofire', '~> 3.0'
end
$ pod install

使い方

import Alamofire
// json
       Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]).responseJSON { response in
           print(response.request)  // original URL request
           print(response.response) // URL response
           print(response.result)   // result of response serialization
           if let JSON = response.result.value {
               print("JSON: \(JSON)")
           }
           if response.result.isSuccess {
               let jsonDic = response.result.value as! NSDictionary
               let url = jsonDic["url"] as! String
               let headers = jsonDic["headers"] as! NSDictionary
               print(url);
               print(headers["Host"])
               for (key, value) in headers {
                   print(key)
                   print(value)
               }
           } else {
               let alert = UIAlertView(title: "エラー", message: "通信に失敗しました", delegate: self, cancelButtonTitle: "OK")
               alert.show()
           }
       }
// str
       Alamofire.request(.GET, "ttps://example.com/get", parameters: ["foo": "bar"]).responseString { response in
           if let str = response.result.value {
               print("str: \(str)")
           }
       }

参考:http://llcc.hatenablog.com/entry/2015/09/29/235112

画像API例

-php

$ret = array(
 'cnt' => 2,
 'imgs' => array(
   array(
     'thumbnail' => "https://pbs.twimg.com/media/ClupGSKWEAAeOuy.jpg",
     'name' => "オバマさん",
   ),
   array(
     'thumbnail' => "https://pbs.twimg.com/media/ClfZX4sWEAEeJzB.jpg",
     'name' => "ドロイド君",
   ),
 ),
);
echo json_encode($ret);
// 生成されたhtml
{"cnt":2,"imgs":[{"thumbnail":"https:\/\/pbs.twimg.com\/media\/ClupGSKWEAAeOuy.jpg","name":"\u30aa\u30d0\u30de\u3055\u3093"},{"thumbnail":"https:\/\/pbs.twimg.com\/media\/ClfZX4sWEAEeJzB.jpg","name":"\u30c9\u30ed\u30a4\u30c9\u541b"}]}

-ImgInit.swift

class ImgInit {
   var name:String = ""
   var thumbnail:String = ""
   init(name: String, thumbnail: String) {
       self.name = name
       self.thumbnail = thumbnail
   }
}

-SampleController.swift

Alamofire.request(.GET, "http://localhost/api/testimgs", parameters: ["param1": "value1"]).responseJSON { response in
   if response.result.isSuccess {
       let jsonDic = response.result.value as! NSDictionary
       let imgs = jsonDic["imgs"] as! NSArray
       let cnt = jsonDic["cnt"] as! Int
       print(cnt)
       var _imgs: Array<ImgInit> = []
       for img in imgs {
           let name:String = img["name"] as! String
           let thumbnail:String = img["thumbnail"] as! String
           let _img = ImgInit(name: name, thumbnail: thumbnail) as ImgInit
           _imgs.append(_img)
       }
       // こんな感じで取得
       for _img in _imgs {
           print("name=\(_img.name), thumbnail=\(_img.thumbnail)")
       }
   }
}

-出力

オバマさん
https://pbs.twimg.com/media/ClupGSKWEAAeOuy.jpg
ドロイド君
https://pbs.twimg.com/media/ClfZX4sWEAEeJzB.jpg

ローディング画面実装

-LoadingProxy.swift

import UIKit
struct LoadingProxy {
   static var myActivityIndicator: UIActivityIndicatorView!
   static func set(v:UIViewController){
       self.myActivityIndicator = UIActivityIndicatorView()
       self.myActivityIndicator.frame = CGRectMake(0, 0, 50, 50)
       self.myActivityIndicator.center = v.view.center
       self.myActivityIndicator.hidesWhenStopped = false
       self.myActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.White
       self.myActivityIndicator.backgroundColor = UIColor.grayColor();
       self.myActivityIndicator.layer.masksToBounds = true
       self.myActivityIndicator.layer.cornerRadius = 5.0;
       self.myActivityIndicator.layer.opacity = 0.8;
       v.view.addSubview(self.myActivityIndicator);
       self.off();
   }
   static func on() {
       myActivityIndicator.startAnimating();
       myActivityIndicator.hidden = false;
   }
   static func off() {
       myActivityIndicator.stopAnimating();
       myActivityIndicator.hidden = true;
   }
   static func checkOn() -> Bool {
       if myActivityIndicator.hidden == true {
           return false;
       }
       return true
   }
}

-呼び出し元.swfit

// api処理前にon
LoadingProxy.set(self);
LoadingProxy.on();
// api処理後以下でoffにする
if LoadingProxy.checkOn() == true {
    LoadingProxy.off();
}

参考:http://swift-salaryman.com/uiactivityindicatorview.php