참고자료

핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍(개정증보판)

https://product.kyobobook.co.kr/detail/S000208958658

 

핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍 | 닐 스미스 - 교보문고

핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍 |

product.kyobobook.co.kr

 

클래스나 구조체 인스턴스에 있는 프로퍼티에 값을 할당하거나 접근할 때 값을 저장하거나 읽어 내기전에 변환 작업이나 유효성 검사를 해야 할 경우가 종종 사용된다.

 

Comparable 프로토콜을 따르는 모든 타입에 사용 될 수 있도록 프로퍼티 래퍼를 구현해본다.

Comparable 프로토콜을 따르는 타입은 값이 같은지, 더 큰지, 작은지를 비교하는데 사용할 수 있다.

String, Int, Date, DateInterval, Characer 같은 다양한 타입이 이 프로토콜을 따른다.

 

@propertyWrapper
struct MinMaxVal<V: Comparable> {
	var value: V
    let max: V
    let min: V
    
    init(wrappendValue: V, min: V, max: V) {
    	value = wrappendValue
        self.min = min
        self.max = max
    }
    
    var wrappedValue: V {
    	get { return value }
        set {
        	if newValue > max {
            	value = max
            } else if newValue < min {
            	value = min
            } else {
            	value = newValue
            }
        }
    }
}

 

struct DateDemo {
	// min : 현재날짜 / max : 한달 후 날짜 설정
	@MinMaxVal(min: Date(), max: Calendar.current.date(byAdding: .month, value: 1, to: Date()!)
    var value: Date = Date()
}

//디폴트로 현재 날짜가 프로퍼티에 설정되었다.
var dateDemo = DateDemo()
print(dateDemo.value)   <======= 2019-08-23 20:05:13 +0000.

//프로퍼티에 10일 후의 날짜를 설정한다.
dateDemo.value = Calender.current.date(byAdding: .day, value: 10, to: Date())!
print(dateDemo.value)   <======= 2019-09-02 20:05:13 +0000  //유효 범위 내에서 있으므로 프로퍼티에 저장된다.

//프로퍼티에 2달 후의 날짜를 설정한다.
dateDemo.value = Calendar.current.date(byAdding: .month, value: 2, to: Date())!
print(deteDemo.value).  <======= 2019-09-23 20:08:54 +0000 //유효 범위 밖이므로 프로퍼티에는 최대값(1달)이 저장된다.

+ Recent posts