* 먼저 글을 쓰기 전에 본인은 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 |
---|