투케이2K

246. (ios/swift) AVSpeechSynthesisVoice 사용해 음성 지원 언어 목록 확인 및 UIAlertController 팝업창 리스트 표시 본문

IOS

246. (ios/swift) AVSpeechSynthesisVoice 사용해 음성 지원 언어 목록 확인 및 UIAlertController 팝업창 리스트 표시

투케이2K 2022. 11. 5. 14:48

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

    // MARK: - [테스트 메인 함수 정의 실시]
    func testMain() {
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> testMain() :: 테스트 함수 시작 실시]")
        print("====================================")
        print("")
        
        
        // [비동기 처리 수행]
        DispatchQueue.main.async {
            
            
            // [배열 선언 실시 및 딕셔너리 선언]
            var speechArray : Array<Dictionary<String, String>> = []
            var speechDic : Dictionary<String, String> = [String : String]()
            
            
            // [음성 지원 보이스 확인 실시]
            AVSpeechSynthesisVoice.speechVoices().forEach { voice in
                
                // [음성 지원 코드]
                let BCPCode = voice.language
                
                
                // [타이틀 확인]
                var title = ""
                let current = Locale.current.languageCode
                let language = NSLocale.init(localeIdentifier: current!)
                title = language.displayName(forKey: NSLocale.Key.identifier, value: BCPCode)?.description ?? ""
                
                
                // [딕셔너리 및 배열에 추가 실시]
                speechDic["Title"] = title
                speechDic["BCPCode"] = "\(BCPCode)"
                
                speechArray.append(speechDic)
            }
            
            
            // [배열 중복 제거 실시]
            let arraySet : Set<Dictionary<String, String>> = Set(speechArray)
            speechArray = Array(arraySet)
            
            
            // [배열 정렬 실시]
            speechArray = (speechArray as NSArray).sortedArray(using: [NSSortDescriptor(key: "Title", ascending: true)]) as! [[String:String]]
            
            
            // [로그 출력 실시]
            print("")
            print("====================================")
            print("[\(self.ACTIVITY_NAME) >> testMain() :: 음성 지원 언어 확인]")
            print("speechArray :: \(speechArray)")
            print("====================================")
            print("")

            
            // [배열 널 체크 수행 실시]
            var actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
            
            if speechArray != nil && speechArray.isEmpty == false && speechArray.count > 0 {
                actionSheet = UIAlertController(title: "[음성 지원 언어 확인]", message: nil, preferredStyle: .actionSheet)
                
                // [배열 돌면서 팝업창 리스트 생성]
                for item in speechArray {
                    
                    // [딕셔너리 선언]
                    let dic : Dictionary<String, String> = item
                    
                    // [팝업창에 리스트 추가 및 클릭 이벤트 지정]
                    var style = UIAlertAction.Style.default
                    let action = UIAlertAction(title: dic["Title"] ?? "", style: style) { action in
                        print("")
                        print("====================================")
                        print("[\(self.ACTIVITY_NAME) >> testMain() :: 팝업창 클릭 이벤트 발생]")
                        print("title :: \(dic["Title"] ?? "")")
                        print("BCPCode :: \(dic["BCPCode"] ?? "")")
                        print("====================================")
                        print("")
                    }
                    actionSheet.addAction(action)
                }
            }
            else {
                actionSheet = UIAlertController(title: "[음성 지원 언어 확인]", message: "음성 지원 언어를 확인할 수 없습니다", preferredStyle: .actionSheet)
            }
            
            
            // [취소 버튼 추가]
            let cancel = UIAlertAction(title: "취소", style: .cancel)
            actionSheet.addAction(cancel)
            
            
            // [팝업창 표시]
            self.present(actionSheet, animated: true, completion: nil)

        }
    }
 

[결과 출력]


반응형
Comments