본문 바로가기
Ios/Swift

축약형을 사용해보기 전에 최대한 축약해보지 말아보자

by 잘먹는 개발자 에단 2024. 7. 18.

* 먼저 글을 쓰기 전에 본인은 Swift 초보라는 것을 밝힙니더.. ( 맥북 생긴지 1일차 ㅋㅋ.. )

 

갑자기 뜬금없지만(?) 자바스크립트 이야기부터 해보려고 한다.

 

 

개발을 할 때 컬렉션을 순회하면서 어떠한 액션을 한다던지, 아니면, 무엇을 반환해줘야 하는 경우가 많다. 

 

우리가 일일히 전부 그려줄 수는 없기 때문이다.  

 

먄약에 어떤 배열을 돌면서 안의 json가지고 뭔가를 한다고 해보자.

landmarks = [{id : 1,name : 'johnson',age : 30}, // ....]

landmarks.map(el => {
	return 
});

 

아마 자바스크립트로 했다면 저런 모양이었을 거다. 

 

자바스크립트에서도 어떠한 배열안의 객체를 쫙 뽑아내주기 위해서 map을 도는데, 안의 람다식을 여러 형태로 사용할 수 있다.

 

원본은

(el) => {

동작

return 화면에 보여줄 것들

}

 

그 다음은 괄호를 없앤다. ( 인자가 1개라면, 람다식에서 중괄호를 생략할 수 있다 )

el => {

동작

return 화면에 보여줄 것들

}

 

만약에 동작이 없고 반환할 것만 있다면 대괄호를 생략할 수 있다. return도 생략할 수 있다.

el => 화면에 보여줄 것들

 

그런데, 다 축약되고나서 우리가 처음에 튜토리얼로 저걸 본다면 원본이 어떻게 생겼는지 알 수 있을까?

그렇지 않은 것 같다.

 

그래서 Swift도 그런 식으로 공부해보자 싶다.

 

 

튜토리얼2를 보면 다음과 같이 나와있다.( https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation )

import SwiftUI

struct LandmarkList : View{
	var body : some View{
    	List(landmarks, id : \.id){
        	landmark in 
            	LandmarkRow(landmark : landmark)
        }
    }
}

 

그런데 보면 저 List에는 축약형이 2번이나 들어가 있다.

 

먼저 리스트 코드블럭 안에 들어가 있는 클로저 같은 경우에는 축약형이다.

 

그리고 List 중괄호 안의 파라미터에 인자로 전달하는 저 부분도 사실 축약형이다.

 

원본으로 풀어보면

 

List{
	ForEach(landmarks, id : \.id){
    	landmark -> LandmarkRow in 
        	return LandmarkRow(landmark : landmark)
    }
}

와 같은 형태가 된다.

 

여기에서 

 

만약에 Landmark이 Identifiable 프로토콜을 채택하면 List와 ForEach에서 id 매개변수를 명시적으로 제공하지 않아도 된다.

( Identifiable 프로토콜 채택을 위해서는 해당 구조체에 id 속성이 있으면 된다 )

 

그러면 다음과 같이 코드가 줄어들 수 있다.

 

//전
ForEach(landmarks, id: \.id) { landmark in
    LandmarkRow(landmark: landmark)
}


// 후
ForEach(landmarks) { landmark in
    LandmarkRow(landmark: landmark)
}

 

그래서 문득 그런 생각이 들었다.

 

저 마지막으로 축약된 코드를 보고 원본을 유추할 수 있을까?

'Ios > Swift' 카테고리의 다른 글

축약형에 대한 주저리 주저리 (feat. C#, JS, Swift)  (0) 2024.07.23