적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/이슈모음집

[Swift iOS] String to URL returns nil (space in URL)

hongssup_ 2021. 11. 12. 14:21
반응형

 

let urlStr = "URL주소"
let url = URL(string: urlStr)!

멀쩡히 잘 쓰던 이 코드에서 갑자기 크래시가 나며 앱이 종료되는 문제가 발생했다. 

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

url 값이 nil 로 나오는 것을 보아 문자열을 url 형식으로 바꿔주면서 문제가 있었던 것 같은데.. 

찾아보니 공백이 있을 경우 url 변환이 제대로 안되어 nil을 리턴할 수 있다고..

확인해보니 url 에 넣어준 값 중에 빈 공백이 포함되어 있던 것이 하나 있던 것이었다. 

문자열에서 공백을 없애는 방법들을 알아보자. 

 

1. URL 인코딩

공백 없애는 법을 찾아봤더니 제일 먼저 찾은 방법은 url을 인코딩 해주는 법. 

let urlStr = "URL주소"
let encoded = urlStr.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url = URL(string: encoded)!

주소에 한글이나 스페이스가 들어갈 경우 url이 nil 로 반환되는것을 막기 위해 위 방법을 써줄 수 있다고 하는데, 나의 경우에는 이 방법은 멀쩡한 숫자도 같이 인코딩되어 더 이상한 url을 만들 뿐이었다. ㅋㅋㅋ 해결불가.. 

 

2. 문자열 공백 치환

그래서 다음 방법으로 .replacingOccurrences를 사용하여 String 속 공백을 치환하는 방법을 사용해 보았더니 잘 되더라. 

let urlStr = "URL주소"
let newStr = urlStr.replacingOccurrences(of: " ", with: "")
let url = URL(string: newStr)!

 

3. 문자열 앞뒤 공백 제거

만약 문자열에 공백이 맨앞이나 맨뒤에 있을 경우에는 .trimmingCharacters 을 사용하여 다음과 같이 문자열 앞뒤 공백을 제거할 수 있다고 한다. 

let urlStr = "URL주소"
let newStr = urlStr.trimmingCharacters(in: .whitespacesAndNewlines)
let url = URL(string: urlStr)!

 


참고 : StackOverflow - replace space in URL

728x90
반응형