본문 바로가기
아이폰

[IOS] URLSession 웹 텍스트

by 코딩히어로 2022. 1. 8.
728x90

웹상의 텍스트 데이터를 내려받아야 하는 경우에 URLSession을 사용합니다.

URLSession은 웹 서버와의 통신을 지원하는 객체입니다.

 

URLSession의 주된 기능은 지정된 URL의 데이터를 읽어 수신이 완료되면 알려주는 것입니다.

URLSession 객체는 백그라운드에서 통신 처리를 수행하기 때문에

메인 프로그램은 URL 객체에 명령을 내린 이후에 곧바로 다른 작업이 가능합니다.

 

이렇게 처리 자체를 백그라운드에서 진행하기 때문에 비동기 통신이라고 합니다.

이와 반대로 실제 처리가 포그라운드에서 수행되면 메인 프로그램은 작업이

완료될 때까지 다른작업을 하지 않고 대기하게 됩니다.

이를 동기통신이라고 부릅니다.

 


URLSession 사용방법으로는 크게 두 가지 방법이 있습니다.

그중 첫번째는 메서드를 만들지 않고 사용하는 방법입니다.

@IBAction func tapLoadText1(){
	// 버튼 눌렀을 때
	if let url = URL(string: "http://test_server/test.txt"){
	// url이 nul이 아니라면 URLSession 객체 생성
		let urlSession = URLSession.shared
		// 데이터를 읽어들이는 태스크를 완료하면 completionHandler 처리가 수행됨
		let task = urlSession.dataTask(with: url, completionHandler:{
			(data,response,error) in
			// Raw 데이터를 UTF8 문자열로 변환
			if let nsstr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue){
				// UTF8 문자열로 변환되면 일반적인 문자열로 변환
				let str = String(nsstr)
				//문자열 출력
				printf("문자열=\(str)]")
			}
		})
		task.resume()
	}
}

 

두 번째 방법은 메서드를 만드는 방법인데 첫 번째와 다른 점은

내려받기가 완료되었을 때 메서드를 호출한다는 점이 특징입니다.

@IBAction func tapLoadText2(){
  	if let url = URL(string: "https://test_server/test.txt"){
    	// url이 nil이 아니라면 URLSession 객체 생성
      	let urlSession = URLSession.shared
      	// 데이터를 읽어들이는 태스크를 완료하면 completionHandler 처리가 수행
      	let task = urlSession.dataTask(with: url,completionHandler:onFinish)
      	task.resume()
	}
}

// 수신이 완료됬을 때 호출되는 메서드 생성
func onFinish(data: Data?, response: URLResponse?, error:NSError?){
	// Raw 데이터를 UTF8 문자열로 변환
	if let nsstr = NSString(data: data!,encoding: String.Encoding.utf8.rawValue){
		//UTF8 문자열로 변환되면 일반적인 문자열로 변환
		let str = String(nsstr)
		//문자열 출력
		printf("문자열=[\(str)]")
	}
}
728x90
반응형

'아이폰' 카테고리의 다른 글

[IOS] Authentication Key 에러 해결  (3) 2022.01.04
[IOS] Swift란?  (0) 2021.10.08
[IOS] 아이폰 Application 개발자가 되기까지  (1) 2020.08.25

댓글