티스토리 뷰

Swift

Swift ) Swift 5.1 변경사항

Zedd0202 2019. 6. 23. 23:50
반응형


안녕하세요 :) Zedd입니다.
제 현생이 너무 바빠서 SwiftUI나 Combine을 전혀..정말 단 1도 못보고있네요. WWDC만 보는 중...ㅠ
그래서 이번주말에..뭘 공부할까 고민하다가, 제목에서 볼 수 있듯이 Swift 5.1 변경사항을 공부하려고 해요.
SwiftUI나 Combine에는 아주 개인적으로 제가 생각하기에..Swift 5.1 핵심 기능(?)이 들어가있거든요. 아실분들은 아시겠지만 Property wrapper입니당 ㅎㅎ

아무튼 공부해보아욘!!!! 

신나는 노래를 틀어봅시다. Marshmello x Kane Brown - One Thing Right 제가 요새 푹빠진 노래에요. 지금 이 글을 쓰는 날 기준으로 2일전에 나온 아주 핫한 신곡..입니다. 하하



음 순서는 Swift-evolution을 기준으로 할건데, 그때그때 봐가면서 순서는 조정할 듯 해요. 그리고 안다룰것도 많음 ㅎ 



[SE-0242] Synthesize default values for the memberwise initializer


이 제안은 간단합니다!



class말고 struct를 생각해볼게요.


struct는 다들 아시다시피 memberwise initializer 를 제공합니다.



이렇게요.


기본값을 줘볼까요? 



name에 명시적으로 "Zedd"라는 값을 할당해주었습니다. 

class였으면 저 name은 initializer에서 초기값 할당을 안해줘도 되는 상황이지만


struct기 때문에..



내가 name을 빼버리면 에러가 나게 됩니다.


ㅎ개빡

내가 손수 initializer를 만들어줘야 함


ㅁ...


이쯤되면 이 제안의.....목적이 뭔지 감이오시죠?

맞습니다. 


Synthesize default values for the memberwise initializer 


그러니까, 음 이 제안의 개선사항(?),, 변경사항은 현재 class는 default intializer를 제공하잖아요? 모든 프로퍼티가 옵셔널 또는 기본값을 가지고 있을때요. 그 방식을 struct에도 도입했다.. 이겁니다.

흠 제가 이해한거 + 쉽게 말하자면 이건데, 


"This proposal aims to solve a simple outstanding problem with the way the Swift compiler currently synthesizes the memberwise initializer for structures by synthesizing default values for properties with default initializers."


원문도 참고하세요.




자 아무튼 이제 이게 된다는 사실.


[SE-252] Key Path Member Lookup

아악 key path.......진짜 이제 ㅇㅏㄹ아야 할때가 ㅇㅘㅆ다.

저는 사실 Key Path를 전혀..쓰지않습니다. 헉 근데 이미 쓰고있는데 모르는건가..? 암튼 제가 ㅅㅐㅇ각하는 key path는 .\어쩌고 이건데 암튼 이건 안씀..

근데 이번에 SwiftUI에서도 .\ 이거 쓰고...암튼 알아야 할떄가 왔는데..지금은 아님ㅋㅎ아무나  key path속성 강의 해줬으면 좋곘다..



자 이번 변경사항은 기존의 @dynamicMemberLookup attribute가 이제 key path implementations을 지원하게 되었답니다,,




[SE-0254Static and class subscripts


이게 도대체 무슨 소리일까..한참을 봤군여



ㅁ ㅓ 이런 struct가 있다고 생각해봅시다. swift 문서에 있는 예제코드를 가져왔습니다. 암튼 이런애임.


근데 이번 제안은 모냐면, static subscript, 또는 class에선느 class subscript선언을 허용하는 부분임ㅎ 이라는 변경사항입니다. TypeName[index]또는 TypeName.self[index]를 통해 사용할 수 있으며 subscript에 대해 기대할 수 있는 모든 기능을 갖는다고 해요. 


ㅇㅋ static을 Swift 5.0에서 붙혀보쟈



당연하겠죠?

Swift 5.1에서 붙혀보죠.



뭔가 터지는 중. 고쳐봅시다. 



자 고쳐봤는데요, 달라진 부분을 찾아봅시댜.

먼저 multiplier가 static var로 바뀌었구요 static이라 3이라는 기본값을 줬습니다. 

그러니 static subscript메소드 안에서도 TypeName으로 multiplier를 접근해야겠죠.


그리고 어쩌구 저쩌구 한담에 TypeName[index]를 했더니..

아까처럼 18이 나온 결과를 볼 수 있습니다. 

제안쪽 예제코드 보니까



뭐 이렇게 쓰는데 암튼..알아서 쓰셈

이 static subscript를 사용해서 dynamic member lookup을 static property까지 확장할 수 있다고 합니다.


진짜 이제 key path랑 dynamic member lookup을 공부할때가 진짜 왔나부다..



[SE-0255Implicit returns from single-expression functions


이거 인정이다..진짜..

구구절절 설명 됐고...구구절절 설명보고싶으면 proposals가서 보셈

computed property같은 경우, 거의 single-expression일텐데요, 


그래서 보통 이렇게 적죠.

하지만 지독한 생략충인 사람에 의해 return이 빠진다면..?



이런이런~~~return 을 빼먹으면 안된다구~~~ㄹ하하하!!

지독하다 지독해..Swift 5.0...



~ Swift 5.1 ~ 



응 가능이야~~


다시 한번 말하지만 single-expression에서만 가능이구요 



이럴땐 return 써줘야ㅕ함.


ㅁ....이제야? map같은 애들에서 벌써부터 되던것을...떼잉........
헉 제가 무슨말을 ㅎ 애플 짱~~!~!~


엥 proposals에서 끝났네..뭐지 



제가 이렇게 찾고있는데..끝나ㅂ렸음..물론 중간중간 안한거 있읍니다 ㅎ 근데 내가 분명이 wwdc에서 본...걔네가 없네

이렇게 되면 Xcode 11 beta release note로 간다.



[SR-7799Matching optional enums against non-optional values




ㅎ ㅏ....ㅋㅎ

이거 빡쳐안빡쳐

저게 옵셔널인 순간...?



알았다구요.....



지독하다..지독해..Swift 5.0..

저 .none과 ?가 싫어서 


강제 언래핑...을 사용하곤 했는데요. 


~ Swift 5.1 ~


?를 안써도 되게 되었읍니다..!! 하지만 .none일 경우는 반드시 필요하겠죠? 



[SE-0244Opaque Result Types


오 얘 진짜..

아 proposals무슨..이해 못하겠음 ㅅㄱ 지독한 설명은 proposal가서 보시구요


간단히 말해서, 

이제 function은 정확한 return type을 지정하는 대신, 준수하는 프로토콜을 선언하여 concrete return type을 숨길 수 있습니다. 


큭ㅋ큭ㅋ...한번에 이해시켜주지..SwiftUI에서 보게되는 


바로 저 some..!!!이 이번 제안의 주인공입니다. 그럼 옆에 View는 프로토콜임?  



ㅇㅇ


뭐 이런게 가능해진다는것이다..!!!

proposal보면..뭐..추상화..generic...reverse generic..뭐 이런이야기가 많은데 날잡고 읽어보면 좋을 듯 합니다. 


아니 property wrapper언제나오지

[SE-0258] Property Wrappers
아 staus가 active review상태군요! 요 Property Wrappers만 보고..제 공부는 마무리하도록 하겠습니다.
 
WWDC에서 SwiftUI나 Combine세션을 보셨다면, 또는 뭐 따로 공부하셨다면


뭐 이런 넘들을 볼 수 있는데요, 띠용..@어쩌구....
일단 Property wrapper가 뭔지 알아야겠죠. 

때때로, 반복적으로 나타나는 property 구현 패턴이 있죠? 
이 고정된 패턴집합을 컴파일러에 하드코딩 하는대신, 이러한 "패턴"을 라이브러리로 정의 할 수 있는 일반적인 "property wrapper"메커니즘을 제공한다는게 이 제안의 목적(?)입니다. 


저도 이게 아직 뭔지 잘 몰라서요. proposal에 있는 예제를 가져와볼게요. 
아니 Xcode beta 2 왜이래요? 저만 이럼? 아니 얘만 키면 노트북이 날아가려고 하네zzz beta 1보다 더 구려졌나 무슨..아니 지금 보니까..제가 지금까지 한거는 playground라 몰랐는데..single view project로 하니까 뭐 swift version이 5.0밖에 없네요..뭐지? beta면 Swift 5.1쓸 수 있는거 아냐ㅕ?...뭐지

그렇다면 WWDC세션 키노트를 봅시다. 


Property Wrapper쓰면 이런거에 조음 ㅎ 어쩌구 저쩌구 



헉..



이렇게 쓸 수 있다구!~~~!~!!~



자. 


Property wrapper를 만들어야 하나? 판단기준은 간단해보이는데요,

패턴이 있냐 없냐? 위 UserDefault같은 경우에는 패턴이 보이죠. UserDefault에 get / set하는 패턴이죠.  뭔가 이런데 사용해~~라고 제시하는거 보니까 거의 get / set 애들인듯


ㅇㅇㅋ 그럼 함 만들어보자


struct든 뭐든 @propertyWrapper라고 타입 선언 앞에 달아줍니다. 

그리고 유저디폴트에 필요한게 머야 일단 key랑 value자나요??


그거 선언해주고 근데 value는 뭐가들어올지 모르니까 generic으로 한 부분임

그래서 어쩌고 저쩌고 해주면...된다. 



뭐 사실 Property wrapper는..생각 외로 별거 없네요? Xcode 11 beta 2진짜 미쳤네...아니 그냥 아무것도 안한 프로젝트 빌드하는데도 이렇게 날아갈것같다니..도대체 뭐가 문제야.. 2017년형이 이러면 어쩌자는건지 플레이그라운드는 잘만 되더니 ㅡㅡ 지금 턱 막히니까 할 생각이 사라짐 ㅎㅎ; 암튼 전ㄴ Property wrapper에 대해 할말이 더 있는데..그건 나중에 봐야겠어요.







반응형