8월, 2021의 게시물 표시

[인터뷰질문 015] 두 개의 튜플의 값이 동일한지 어떻게 비교하시겠습니까?

이미지
튜플의 비교 튜플은 이름없는 구조체 라고도 하죠. 튜플이 같은지 비교하는 방법은 간단합니다 == 기호를 써줍니다. 여러 예제를 통해 비교해 보도록 하겠습니다. let temp1 = ( 2 , 4 ) let temp2 = ( 2 , 4 ) let temp3 = ( 3 , 4 ) let temp4 = ( top : 2 ,bottom: 4 ) print (temp1 == temp1) // true print (temp1 == temp2) // true print (temp1 == temp3) // false print (temp1 == temp4) // true 당연히 자기 자신과 비교 하면, 같다 라는 결과가 나옵니다. 값을 비교하는 연산자 이기 때문이죠. 그리고 다른 변수에 할당 하더라도 값이 같으면 true 의 결과값이 나옵니다. 그리고 (2,4)와 (3,4)는 같지 않기 때문에 false 가 출력되는 것을 볼 수 있습니다. 또한 tuple은 element의 이름을 지정할 수 있는데, 두 튜플이 같다고 해서 elemene의 이름까지 같음을 보장하지는 않습니다. 그러므로 temp4와 temp1이 다른 element 이름을 가지고 있어도, 같은 튜플로 인식합니다.

[인터뷰질문 013] Result 타입은 언제 사용할 수 있나요

이미지
Result 타입은 Swift5에 추가되었습니다. 그렇다면 왜 추가되어야 했는지 Result 타입이 없었을 때는 어떤 문제가 있는지 알아보면서 Result에 고마움에 대해 알아보도록 하겠습니다. Result가 없는 세상 Result 타입은 네트워크 요청 쪽에서 많이 사용되었습니다. 예를 들면 아래와 같은 상황에서 말이죠. import Foundation func getData <T: Decodable> (urlString: String, completion: @escaping (T?) -> Void ) { let url = URL (string: urlString)! URLSession .shared.dataTask(with: url) { data, response, error in if let error = error { return completion( nil ) } guard let data = data else { return completion( nil ) } guard let response = response as ? HTTPURLResponse , response.statusCode == 200 else { return completion( nil ) } guard let parsedData = try ? JSONDecoder ().decode( T . self , from: data) else { return completion( nil ) } completion(parsedData) }.resume() } URLSession.shared.dataTask 에서 요청한 응답 중 에러를 처리하려면, 정상적인 케이스와 정상적이지 않은 케이스들을 구...