Alamofire와 SwiftyJSON

Alamofire와 SwiftyJSON의 간단한 앱




완성형은 이런 느낌

기능 설명


  • TextField.text 는 검색 키워드로 이용한다
  • 아래의 TextField.text는 검색 할 URL 수를 입력합니다.
  • 검색 버튼으로 Pixabay에서 이미지 URL 가져 오기
  • 얻은 URL을 셀에 표시하고 볼 수있게합니다

  • 코드


  • Podfile에 pod 'SwiftyJSON'pod 'Alamofire' 를 입력

  • Podfile
     pod 'SwiftyJSON'
     pod 'Alamofire'
    

    모델



    GetPixabayDataModel
    import Foundation
    import Alamofire
    import SwiftyJSON
    
    class GetPixabayDataModel{
    
        var imageURLArray:[[String:String]] = []
    
    }
    
    extension GetPixabayDataModel{
    
        func searchImage(searchKey:String,searchCount:Int){
    
            let pixabayURL = "https://pixabay.com/api/?key=~~~~~~~~(APIKey)~~~~~~~~~~&q=\(searchKey)"  //APIKey
    
            AF.request(pixabayURL, method: .get, parameters: nil, encoding: JSONEncoding.default).responseJSON { (response) in
    
                switch response.result{
    
                case.success:
    
                    self.imageURLArray = []  //検索する時に、データの重複を防ぐ
                    let json:JSON = JSON(response.data as Any)
    
                    for count in 0...searchCount - 1{
    
                        if json["hits"][count]["webformatURL"].string != nil{  //取得できる"webformatURL"が存在する時は、"webformatURL"を取得する
    
                            //jsonの中の配列"hits"からcount番目の各"webformatURL"をString型で取得して配列に入れる 
                            self.imageURLArray.append(["imageURLString":json["hits"][count]["webformatURL"].string!])  
    
                        }else{
    
                            break  //取得できる"webformatURL"が無くなった時に処理を終わらせる
    
                        }              
                    }
    
                case.failure(let error):
                    print(error)
    
                }
    
            }
        }
    }
    
    

    컨트롤러



    ViewController
    import UIKit
    
    class ViewController: UIViewController{  
    
        @IBOutlet weak var keyowrdTextField: UITextField!
        @IBOutlet weak var countTextField: UITextField!
        @IBOutlet weak var searchButton: UIButton!
        @IBOutlet weak var tableView: UITableView!
    
        let getPixabayDataModel = GetPixabayDataModel()    
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.tableView.delegate = self
            self.tableView.dataSource = self
    
        }
    
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
    
            searchButton.layer.cornerRadius = 17.0
    
        }
    
        @IBAction func search(_ sender: Any) {
    
            if (keyowrdTextField.text!.isEmpty && countTextField.text!.isEmpty) != true{
    
                self.getPixabayDataModel.searchImage(searchKey: self.keyowrdTextField.text!, searchCount: Int(self.countTextField.text!)!)
    
                DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
    
                    self.tableView.reloadData()
    
                }
    
    
            }else{
    
                //アラート表示など エラー処理
    
            }
        }
    }
    

    ViewController
    import Foundation
    import UIKit
    
    extension ViewController:UITableViewDelegate,UITableViewDataSource{
    
        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    
            return 85
    
        }
    
        func numberOfSections(in tableView: UITableView) -> Int {
    
            return 1
    
        }
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
            self.getPixabayDataModel.imageURLArray.count
    
        }
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    
            let cellURLLabel = cell.contentView.viewWithTag(1) as! UILabel
    
            cellURLLabel.text = self.getPixabayDataModel.imageURLArray[indexPath.row]["imageURLString"]
    
            return cell
    
        }  
    }
    



    최근 Realm과 FireStore만 하고 있었으므로, 잊지 않도록 사용해 보았습니다.
    이번 앱을 기반으로 기능을 늘리고 싶다 (URL을 바탕으로 이미지를 표시하거나)

    좋은 웹페이지 즐겨찾기