처음에는 가볍게 깃허브 잔디 심기 위해서 얼른 풀 생각이었는데,,,,
import Foundation
func solution(_ my_string:String) -> String {
return my_string.lowercased().sorted()
}
이렇게 풀었는데
이렇게 혼나버렸다.
바로 타입 변환이 필요하다는 것을 깨닫고
import Foundation
func solution(_ my_string:String) -> String {
return String(my_string.lowercased().sorted())
}
이렇게 변환해서 성공적으로 잔디를 심을 수 있었다.
이렇게 쉬운 문제를 별다른 고민없이 성공했다고 생각한 것이 좀 짜증났다.
사실 Swift의 특성을 잘 이해하고 있었으면, 이런 실수는 절대 하지 않았을 것이다.
String으로 감싸야하는 상황은 주로 반환 타입이 명확히 지정되어 있을 때, 결과 값의 타임이 다를 경우에 발생한다.
이 문제에서 String(my_string.lowercased().sorted())
이렇게 해야했던 이유는 sorted()
메서드가 반환하는 값이 Array<Character>
타입이기 때문이다. 그래서 문자열로 변환하기 위해서 String()
으로 감싸주어야 했던 것이다.
함수의 선언부에 명시된 반환 타입과 실제 결과값의 타입이 다른 경우, 변환이 필요하다.
func example() -> String {
let array: [Character] = ["a", "b", "c"]
return String(array) // 반환 타입에 맞추기 위해 String으로 변환
}
에러 메시지가 "Cannot convert value of type 'X' to expected argument type 'Y'"
와 같은 형식이라면, X 타입을 Y 타입으로 변환해야 한다는 뜻이다. 하지만 에러를 발견하기 전에 처음부터 정확히 설계하는 것이 중요할 것 같다.
타입 추론이 어려운 경우 명시적으로 변환해야 한다.
let numbers = [1, 2, 3]
let stringRepresentation = String(numbers) // 오류: 배열은 문자열로 직접 변환할 수 없음