Swift Macros에서는 Swift Error를 이용해 Custom Error 메시지를 노출시킬 수 있습니다. 이 내용도 앞서 1편~4편에서의 DictionaryStorage 를 계속 예시로 들고있는데요,, 간단히 말하면 DictionaryStorage매크로는 struct에 적용되어 init()과 var dictionary프로퍼티를 만들어줍니다. 근데 만약 enum에 매크로를 작성하게 되면, init에 var dictionary라는 저장프로퍼티를 넣을 수 없으니 컴파일 오류가 나겠죠? 물론 전개된걸 보고 유추를 하면 아..이건 enum에 쓸 수 없겠구나.. 하면서 유추를 할 수는 있겠지만 약간 혼란스러울수가 있겠죠,, 그래서 우리는 enum에 쓰면 이건 struct에만 쓸 수 있는 매크로야!!!!!!..
앞에서는 매크로가 뭔지, 매크로 역할(roles)에 대해 작성했었는데, 이제 매크로 구현부는 어떻게 생겼나..소개하는 WWDC 내용을 정리해보겠습니다~ 구현과 선언 연결하기 일단 앞에서 계속 봤듯이 선언은 이런식으로 macro 키워드와 매크로 이름, 받을 매개변수 등을 적어주고 매크로 위에 역할을 적어주면 됩니다~ 근데 .. 어떤 내용으로 전개할건지를 포함한 매크로 구현부도 작성해줘야겠죠?! 이 구현부는 함수로 만들고, 선언의 = 옆에 작성해주면 됩니다. 대개는 이런 external 매크로를 사용하게 되는데, 이 external macro는 compiler plugin에 구현되어 있습니다. 1편에서 봤던 매크로 작동방식중에 이런내용이 있었는데요!! Swift Compiler에서 #stringify라는 매..
@1편에서는 매크로가 뭔지에 대해, 2편에서는 매크로의 role이 뭔지, 그 중 freestanding 매크로에 대해 작성해봤는데, 이번에는 macro의 role중 attached macro에 대해 써보려고 합니다. freestanding매크로의 경우에는 오직 전달된 인수만 받는데, attached매크로의 경우에는 매크로와 연결된 선언부분에 대한 정보를 가져올 수도 있다는 차이점이 있습니다. @attached(peer) attached peer매크로는 매크로가 적용된 선언부분 옆에 새로운 선언을 만들 수 있습니다. 예를들어, async함수인 fetchAvatar()라는 함수를 만들었다고 했을 때, 옛날 방식인 completion방식도 필요하다고 생각해봅시다. 그러면 async함수를 작성한 후, 또 매개변..
1편에서는 매크로란 무엇인지, 왜나왔는지, 매크로가 어떤식으로 작동하는지 대략적으로 작성했고, 이번에는 Macro roles에 대해 작성해보려고 합니다. Macro roles(역할)이란? 역할은 매크로에 대한 규칙을 말합니다. 매크로마다 어디에 적용할지, 어떤 코드로 전개될지, 매크로로 전개한 코드가 어디에 삽입될 것인지 등을 미리 결정해주고, 예측이 가능해야 하는데 이를 해주는게 바로 Macro roles 입니다! 처음에 이 이야기만 봐서는 이해가 잘 안되었는데, 예시를 하나 들어보자면 만약에 제가 1. struct에 AProtocol, BProtocol, CProtocol을 직접 작성하지 않고도 채택하게 해주는 @FirstMacro라는 매크로와 2. struct에 `let count: Int` 라는 ..
이번주에 WWDC23에서 공개한 Swift Macros에 관련된 두 세션(Expand on Swift Macros, Write Swift Macros)을 듣고 직접 매크로를 만들어봤는데 블로그에 정리를 좀 하면 좋을 것 같아서 글을 쓰게되었습니다~! 두 세션 다 아직 보지 않았지만 볼 예정이시라면 (?) Expand on Swift Macros -> Write Swift Macros 순서로 시청하는 것을 추천드립니다. 매크로란? 매크로는 Swift 언어를 사용자에 맞춰서 커스텀해주는 역할을 합니다. ..이게 뭔소리냐하면.. WWDC에서 소개한 예시 중 가장 와닿는 예시는 Codable과 관련된 예시였는데요 저희가 보통 Codable을 채택해서 쓸 때, 따로 CodingKeys를 지정해 줄 필요가 없다면 ..
오류 tuist fetch할때 아래와 같은 오류가 남 error: terminated(1): /usr/bin/xcrun --sdk macosx --show-sdk-platform-path output: xcrun: error: unable to lookup item 'PlatformPath' from command line tools installation xcrun: error: unable to lookup item 'PlatformPath' in SDK '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk' 해결 1. xcrun --show-sdk-path --sdk macosx 2. sudo xcode-select -switch /Applications/X..