【Xcode】히라가나화 API를 사용한 앱을 만들었습니다【Swift】

소개



네, 하루 토끼 입니다. 이번에는 Swift와 Xcode를 사용하여 goo의 히라가나화 API를 사용하여 앱을 만들었습니다. 간단한 비망록이라고 할까, 자기만한 기사입니다.
학생의 무렵에 Swift3를 건드린 이래 오랜만에 썼습니다. Xcode도 변하고 있는 곳이 몇점이나 있어 익숙해지기에 고생했습니다.

아무것도 모르는 초보자가 앱을 개발한다는 전혀 타격이 되지 않는 기사가 되어 있으므로, 흥미 본위로 봐 주시면 다행입니다.

참고 사이트



조사해 보니 몇 명이 기사 등을 썼습니다.



이상의 사이트를 참고로 했습니다.

goo의 히라가나화 API에 대해서



여기 에 API에 대한 개요가 쓰여져 있습니다.

그 이름대로, 한자가 포함한 글을 히라가나로 하는 간단한 것입니다.

우선 외형이다 👀



앱 시작시 화면 (LaunchScreen.storyboard)




자신의 로고가 먼저 나오게 했습니다(자기 주장이 심한)

중요한 앱 화면 (Main.storyboard)




이라 스토야 삼매군 w
조작은 나중에 작성하므로 발췌합니다.

좀 더 코드를 작성



ViewController.swift
import UIKit

class ViewController: UIViewController ,UITextFieldDelegate{

    @IBOutlet weak var convertText: UITextField!
    @IBOutlet weak var convertedText: UILabel!
    @IBOutlet weak var errorText: UILabel!

    let api = API()

    override func viewDidLoad() {
        super.viewDidLoad()
    }
        @IBAction func convertButton(_ sender: Any) {
        guard let convertTextForApi = convertText.text else {
        return
        }
       //api通信
        self.api.convertHiragana(convertTextForApi: convertTextForApi) { (convertedStr) in
        guard let _convertedStr = convertedStr else {
              //コンバート失敗
              //アラートを出す
              return
          }
          DispatchQueue.main.async {
              self.convertedText.text = _convertedStr
          }
      }

    }
}

Api.swift
import Foundation

class API {
    let host = "https://labs.goo.ne.jp/api"
    let appID = "自分で取得したAPIのアレ"
    let requestID = "record003"
    let postMethod = "POST"

    func convertHiragana(convertTextForApi: String, completion:((String?) -> Void)?) {
       let url = "https://labs.goo.ne.jp/api/hiragana"
        let outputType = "hiragana"
        let postData = PostData(app_id: self.appID, request_id: requestID, sentence: convertTextForApi, output_type: outputType)

        self.request(method: "POST", url: url, postData: postData, completion: completion)
    }

    func request(method: String, url: String, postData:PostData,  completion:((String?) -> Void)?) {
        guard let _url = URL(string: url) else { return }
        // URLRequstの設定
        var request = URLRequest(url: _url)
        request.httpMethod = method
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")

        //POSTするデータをURLRequestに持たせる
        guard let uploadData = try? JSONEncoder().encode(postData) else {
            debugPrint("json生成に失敗しました")
            return
        }
        request.httpBody = uploadData

        //APIへPOSTしてresponseを受け取る
        let task = URLSession.shared.uploadTask(with: request, from: uploadData) {
            data, response, error in
            if let error = error {
                debugPrint ("error: \(error)")
                completion?(nil)
                return
            }
            guard let response = response as? HTTPURLResponse,
                (200...299).contains(response.statusCode) else {
                    debugPrint ("server error")
                    completion?(nil)
                    return
            }
            guard response.statusCode == 200 else {
                debugPrint("サーバエラー ステータスコード: \(response.statusCode)\n")
                completion?(nil)
                return
            }

            guard let data = data, let jsonData = try? JSONDecoder().decode(Rubi.self, from: data) else {
                debugPrint("json変換に失敗しました")
                completion?(nil)
                return
            }
            debugPrint(jsonData.converted)
            completion?(jsonData.converted)

        }
        task.resume()
    }
}
struct Rubi:Codable {
    var request_id: String
    var output_type: String
    var converted: String
}
struct PostData: Codable {
    var app_id:String
    var request_id: String
    var sentence: String
    var output_type: String
}

조작





1. 오렌지 연설 거품은 textfield이므로 여기에 한자를 포함하는 문장을 입력합니다.
2. 소녀가 버튼으로되어 있습니다. 탭합니다.
3. 파란색 연설 거품에 히라가나화된 문장이 표시됩니다.

이상, 간단하네! 예!

반성점


  • textfield와 button을 이해하기 어렵습니다
  • 텍스트 필드를 탭해도 문자가 사라지지 않습니다 (스스로 지우지 않으면 안됨).
  • 원래 디자인이 나쁘다
  • MVC, MMVC가 아닙니다
  • 객체 지향 모르기
  • Xcode 조작 모르겠습니다
  • Swift 모르겠
  • autolayout 무엇 그것 맛있어?

  • 개선하고 싶은 점


  • 반성점을 개선하고 싶다
  • 객체 지향과 Xcode와 Swift 완전히 이해했다. 되고 싶다
  • autolayout의 이해를 깊게합니다

  • 요약



    쓰지 않았지만 SwiftUI에서 고전했습니다.
    모르는 것들로, 일단 앱을 만드는 것은 아닙니다 ()
    하지만 모르는 대로 팔로워 씨에게 가르쳐 주거나 조사하거나 즐거운 시간이었습니다.
    조금은 자주력도 붙은 것은? ? ? ? 라고 생각합니다.
    이번에는 더 UI가 제대로 된 무언가를 만들고 싶습니다.

    「MVC, MMVC 이렇게 쓰면 좋다!!」라든가 「이런 편이 좋다」라고 하는 점이 있으면, 상냥하게 가르쳐 주실 수 있으면 다행입니다.

    끝까지 읽어 주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기