Model 데이터 변수가 옵셔널이고 Binding시 unwrapping 하는 방방임..
import SwiftUI
/*
MARK: Binding 변수가 optional 일 경우 unwrapping 해서 사용가능하게 함.
타입별로 추가해서 사용하면됨.
*/
// Bool unwrapping
extension Binding where Value == Bool? {
func onOptional(_ fallback: Bool) -> Binding<Bool> {
return Binding<Bool>(get: {
return self.wrappedValue ?? fallback
}) { value in
self.wrappedValue = value
}
}
}
// String unwrapping
extension Binding where Value == String? {
func onOptional(_ fallback: String) -> Binding<String> {
return Binding<String>(get: {
return self.wrappedValue ?? fallback
}) { value in
self.wrappedValue = value
}
}
}
// Int unwrapping
extension Binding where Value == Int? {
func onOptional(_ fallback: Int) -> Binding<Int> {
return Binding<Int>(get: {
return self.wrappedValue ?? fallback
}) { value in
self.wrappedValue = value
}
}
}
[사용방법]
$searchTags[index].isSelected.onOptional(false)
isSelected 변수가 옵셔널이라 그냥 바인딩하면 오류를 뿜어냄..
뒤에 onOptional(false) 붙이면 unwrapping 되서 바인딩됨. false값은 unwrapping시 실패할 경우 default 값임.
ForEach(searchTags.indices, id: \.self) { index in
if let tag = searchTags[index].hashtag {
TagTogleButton(isSelected: $searchTags[index].isSelected.onOptional(false),
tag: tag) { tag in
tagSelectedCloser(tag)
}
}
}
'SwiftUI' 카테고리의 다른 글
[SwiftUI] NavigationBar / safeArea Height 알아오기 (0) | 2024.06.27 |
---|---|
[SwiftUI] Gradient Tag Toggle Button (0) | 2024.06.11 |
[SwiftUI] 조절가능한 BottomSheetView (IOS 16 미만) (0) | 2024.06.10 |
[SwiftUI] PHPickerViewController 멀티선택 사진앨범 가져오기(IOS 14이상) (0) | 2024.05.31 |
[SwiftUI] Permission Manager (0) | 2024.05.30 |