【Xcode】히라가나화 API를 사용한 앱을 만들었습니다【Swift】
소개
네, 하루 토끼 입니다. 이번에는 Swift와 Xcode를 사용하여 goo의 히라가나화 API를 사용하여 앱을 만들었습니다. 간단한 비망록이라고 할까, 자기만한 기사입니다.
학생의 무렵에 Swift3를 건드린 이래 오랜만에 썼습니다. Xcode도 변하고 있는 곳이 몇점이나 있어 익숙해지기에 고생했습니다.
아무것도 모르는 초보자가 앱을 개발한다는 전혀 타격이 되지 않는 기사가 되어 있으므로, 흥미 본위로 봐 주시면 다행입니다.
참고 사이트
조사해 보니 몇 명이 기사 등을 썼습니다.
이상의 사이트를 참고로 했습니다.
goo의 히라가나화 API에 대해서
여기 에 API에 대한 개요가 쓰여져 있습니다.
그 이름대로, 한자가 포함한 글을 히라가나로 하는 간단한 것입니다.
우선 외형이다 👀
앱 시작시 화면 (LaunchScreen.storyboard)
자신의 로고가 먼저 나오게 했습니다(자기 주장이 심한)
중요한 앱 화면 (Main.storyboard)
이라 스토야 삼매군 w
조작은 나중에 작성하므로 발췌합니다.
좀 더 코드를 작성
ViewController.swiftimport 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.swiftimport 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. 파란색 연설 거품에 히라가나화된 문장이 표시됩니다.
이상, 간단하네! 예!
반성점
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
}
}
}
}
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
}
개선하고 싶은 점
요약
쓰지 않았지만 SwiftUI에서 고전했습니다.
모르는 것들로, 일단 앱을 만드는 것은 아닙니다 ()
하지만 모르는 대로 팔로워 씨에게 가르쳐 주거나 조사하거나 즐거운 시간이었습니다.
조금은 자주력도 붙은 것은? ? ? ? 라고 생각합니다.
이번에는 더 UI가 제대로 된 무언가를 만들고 싶습니다.
「MVC, MMVC 이렇게 쓰면 좋다!!」라든가 「이런 편이 좋다」라고 하는 점이 있으면, 상냥하게 가르쳐 주실 수 있으면 다행입니다.
끝까지 읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(【Xcode】히라가나화 API를 사용한 앱을 만들었습니다【Swift】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/haruusagi/items/9da1ca30f56487f21801
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Xcode】히라가나화 API를 사용한 앱을 만들었습니다【Swift】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/haruusagi/items/9da1ca30f56487f21801텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)