✔︎ 오늘의 정리
- API 써보기
- PickerView 활용하기
파파고 언어감지 API
func detectLang(text: String) {
guard let validText = text.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { return }
let url = "https://openapi.naver.com/v1/papago/detectLangs"
let header: HTTPHeaders = [
"X-Naver-Client-Id": "tDOtE3zKwnMM6XoHScOX",
"X-Naver-Client-Secret": APIKey.naverAPI.rawValue
]
let parameter: Parameters = [
"query": validText
]
AF.request(url, method: .post, parameters: parameter, headers: header).validate().responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
print(json)
self.lang = json["langCode"].stringValue
case .failure(let error):
print(error)
}
}
}
원래는 이런 식으로 코드를 작성했는데, 자꾸 이상한 결과가 나왔다.
분명 한국어를 넣었는데 rs가 나오고, 러시아어를 넣으니 베트남어라고 하는 것이다.
태국어를 넣어도? 이상하게 나오길래 내가 뭔가 처리를 잘못 해 준 것 같아서 코드를 다시 보게 되었다.
분명이 insomnia에서 테스트할 때는 잘 돌아가서 왜 안 되지?! 했는데 문제는 query 값으로 들어가는 text 처리였다.
왜 그랬는지는 모르겠지만 왠지? json값을 처리할 때 들어가는 친구들은 모두 인코딩을 해 줘야 대는 거 아닌가?? 했다.
당근 아니었고....
query 값을 parameter로 주는 게 아닌 URL로 줬으면 마땅히 처리를 해 줘야겠지만!! 여기서는 그럴 필요가 없었다.
func detectLang(text: String) {
let url = "https://openapi.naver.com/v1/papago/detectLangs"
let header: HTTPHeaders = [
"X-Naver-Client-Id": "tDOtE3zKwnMM6XoHScOX",
"X-Naver-Client-Secret": APIKey.naverAPI.rawValue
]
let parameter: Parameters = [
"query": text
]
AF.request(url, method: .post, parameters: parameter, headers: header).validate().responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
print(json)
self.lang = json["langCode"].stringValue
case .failure(let error):
print(error)
}
}
}
이렇게만 써줘도 잘 돌아가더라!


요기까지 일단 하긴 했는데 pickerView를 이용하는 다른 과제도 ㅋㅋ 욕심이 나서 해보려구 한다.
PickerView 활용하기
extension TranslationPickerViewController: UIPickerViewDelegate, UIPickerViewDataSource {
// 해당 셀을 선택했을 때 어떻게 할지 action을 여기서 지정!
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
guard let text = originTextView.text else { return }
callRequest(text: text, lang: list[row])
}
// Picker 좌우로 몇 개 둘 건지!!
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
// 볼의 셀 갯수 세기!
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return list.count
}
// 말 그대로 타이틀 지정해 주기!!
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return "\(list[row])"
}
}
처음에 픽커뷰를 딱 놓기는 했는데 너무 막막했따 ㅋㅋ
어떻게 했더라!? 하고 일단 익스텐션에 delegate랑 DataSource를 넣어 놓으니까 알아서 numberOfConponents와 numberOfRowsInComponent를 구현해 줘서 휴~~ 했다
글구 픽커뷰 치고서 나오는 메서드들을 보니까 조금 익숙한 친구들이 몇 개 있어서 그대로 가져와서 써줬다 ㅋ.ㅋ
다행히도 전에 썼던 기억이 쓰다보니 조금씩은?? 나서!! 다행이었다
근데 막상 해보니까 화면이 안 나오길래 왜 안나오지?! 했떠니
역시나~~

viewDidLoad에 delegate / dataSource 연결해 주는 것도 까묵지 말기.
꼬옥.
지금 다른 글로 하나 파서 ARC 정리 중인데 온르 ,,,, 다 못 끝낼 거 같다 ㅋ,ㅋ
낼..... 이어서 해야겟다
대충 내용은 알앗으니 정리만 하면 댐
근데 이게 젤 오래걸려서문제지~~~!!!!!!!
오늘 못 잔 잠을 몰아잔 건지 진짜 만이 잣다
낼은 일머 안대는데 ㄱ-
아무튼 ㅃㄹ 자야겟음
'TIL' 카테고리의 다른 글
[SeSAC] August 15, 2023 (3) | 2023.08.16 |
---|---|
[SeSAC] August 13, 2023 (0) | 2023.08.14 |
[SeSAC] August 7, 2023 (0) | 2023.08.07 |
[SeSAC] August 6, 2023 (0) | 2023.08.07 |
[SeSAC] August 3, 2023 (2) | 2023.08.04 |