아삭아삭 iOS 개발

[Swift 독학] 패스트캠퍼스 챌린지 24일차_프로퍼티 래퍼 본문

Swift

[Swift 독학] 패스트캠퍼스 챌린지 24일차_프로퍼티 래퍼

바닐라머스크 2022. 2. 16. 23:13

 

프로퍼티 래퍼 (Property Wrappers)

  • 프로퍼티 래퍼는 래핑된 값을 저장하는 역할 수행
    → 쓰레드 안정성 검사할때 사용
    → 기본 데이터를 데이터베이스에 저장하는 프로퍼티가 있는 경우 사용
  • 프로퍼티 저장방법 관리코드와 프로퍼티 저장코드 사이에 추가
  • wrappedValue 프로퍼티를 정의하는 구조체/열거형/클래스 생성하여 정의
  • 프로퍼티 래퍼 관리코드는 작성한 , 여러 프로퍼티에 적용해서 재사용 가능
    → 프로퍼티 래퍼를 사용하여 다른 여러 프로퍼티의 get구문과 set구문에서 코드를 재사용 가능

스위프트 문법 사이트[1]에 나온 예시를 응용하여 아래와 같이 HundredOrLess 프로퍼티 래퍼를 작성해보았다.

100세 시대니까 100세 이하까지는 stillyoung하다는 것으로 newvalue에 할당된 숫자들을 검사하는 과정~

정말 변수명이나 입력값만 맘대로 바꾸고, 그 구조틀 자체는 크게 바꾸지 않았는데도 자꾸 에러가 났다ㅠㅠ 왜때문에ㅠㅠ

 

// HundredOrLess 구조체는 래핑하는 값이 100과 같거나 더 작은 숫자가 포함됨
// 더 큰 숫자를 저장할 경우, 100이 저장됨

@propertyWrapper // 이거를 첫머리에 써줘야 함. 안썼더니 프로퍼티 래퍼라고 인식을 못해

struct HundredOrLess {
    private var stillYoung = 0
    var wrappedValue: Int {
        get { return stillYoung }
        set { stillYoung = min(newValue, 100) }
    }
}

// set구문은 새로운값인 newValue가 100보다 작거나 같은 값인지 확인함
// get구문은 newValue에 저장된 값을 반환함

// stillYoung 선언부는 HundredOrLess의 구현에서만 stillYoung이 사용될 수 있도록 private 변수를 표기
// 그래서 다른 곳에서 작성된 코드는 wrappedVlue를 위한 get, set을 사용해서 값에 접근하거나 직접적으로 stillYoung 을 사용할 수 없음

// 아래는 항상 100이하인지 확인하기 위해 HundredOrLess 프로퍼티 래퍼를 사용하여 그룹나이를 저장하는 구조체
// 여기서는 속성으로 프로퍼티 전에 래퍼의 이름인 @HundredOrLess을 언급하여 프로퍼티 래퍼에 적용시킴

struct GroupAge {
    @HundredOrLess var you: Int
    @HundredOrLess var me: Int
}

var weareyoung = GroupAge()
print(weareyoung.you)    // 0
(playground에서 이때 자꾸 위 문구와 함께 에러가 났었다. command 창에서는 문제없이 돌아감.)

weareyoung.you = 88
print(weareyoung.you)  // 88

weareyoung.me = 120
print(weareyoung.me)  // 100

 

구글링해보니 2020년도에 누군가가 똑같은 사이트의, 똑같은 예시로, 똑같은 에러가 나서 글을 올려둔게 있어 참고하였다. [2]

그덕분에 이부분이 playground에서만 보이는 swift자체 버그로 추정되며, 이럴 때는 swift commmand창에서 돌려보면 추가 확인이 가능한 것을 알았다.

 

※ 아래 사진은 swift 커멘드창 들어가는 곳 : macOS > Command Line Tool

 

 

 

본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.

 

 fast campus강의  참조자료

[1] https://bbiguduk.gitbook.io/swift/language-guide-1/properties#property-observers

[2] https://forums.swift.org/t/property-wrappers-exhibit-strange-behaviour-in-playground/40082/9

     : 이번시간 실습해볼때 발생했던 에러와 동일한 이슈로 문의답변 확인한 곳

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.