[SeSAC] August 10, 2023

✔︎ 오늘의 정리

  • 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)
            }
        }
    }

이렇게만 써줘도 잘 돌아가더라!

 

 

 

etc-image-0etc-image-1

 

 

 

요기까지 일단 하긴 했는데 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를 구현해 줘서 휴~~ 했다

 

글구 픽커뷰 치고서 나오는 메서드들을 보니까 조금 익숙한 친구들이 몇 개 있어서 그대로 가져와서 써줬다 ㅋ.ㅋ 

다행히도 전에 썼던 기억이 쓰다보니 조금씩은?? 나서!! 다행이었다

 

근데 막상 해보니까 화면이 안 나오길래 왜 안나오지?! 했떠니

역시나~~

 

 

 

etc-image-2

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