티스토리 뷰
[Swift/iOS] CoreData 사용하기(4) - 속성값 유무에 따른 데이터 저장, 속성의 optional 타입
마들브라더 2023. 5. 6. 02:13이전 포스팅에서는 Object에 값을 다 채워서 데이터를 저장했다.
모든 값이 채워지지 않은 Object를 저장하면 어떻게 될까?
nil이 포함된 저장
car.setValue(myCar["brand"], forKey: "brand")
// car.setValue(myCar["color"], forKey: "color")
car.setValue(myCar["price"], forKey: "price")
위와 같은 코드로, 일부 값을 비워서 저장해보자
value를 주지 않고 저장하면 해당 값이 nil로 들어가게 된 것을 알 수 있다.
Entity의 속성의 optional 유무
그럼 Entity의 속성들은 기본적으로 optional일까?
guard let newcar = try? context.fetch(Car.fetchRequest()) else { return }
newcar.forEach {
print($0.brand, $0.color, $0.price)
print(type(of: $0.brand))
print(type(of: $0.color))
print(type(of: $0.price))
}
brand와 colors는 optional로, price는 Int64로 나온다
그럼 이번에는 price 값을 주지 않고 저장해보자
car.setValue(myCar["brand"], forKey: "brand")
car.setValue(myCar["color"], forKey: "color")
// car.setValue(myCar["price"], forKey: "price")
두둥
nil이 아니라 0이 들어가있는 것을 알 수 있다
아무런 설정을 하지 않는다면, 현재 String 속성은 optional로, Int64는 non-optional인 것을 알 수 있다
optional 설정하기
사실은 Data Model 파일에서 Entity의 Attribute를 클릭한 후, 인스펙터 창을 확인하면 optional 여부를 설정할 수 있는 부분이 있다
인스펙터 창에서는 옵셔널 여부와 Default 값도 설정해줄 수 있다
근데 Integral64는 현재 optional로 설정되어있지만 기본 값이 0으로 설정되어 있다
기본 값 삭제하고 테스트해보자(No Value)
0이 기본값으로 들어가고, 여전히 Int64로 타입이 나온다
질 수 없지
optional 도 체크해제 하고 저장해본다
에러 발생..
속성값이 non-optional 일때, 값이 전달되지 않으면 오류가 발생한다
그리고 저장된 데이터들 중에 nil이 있는데 이후에 속성 값을 non-optional로 설정하면 역시 오류가 발생한다
속성 타입을 잘 관리해야 나중에 오류를 피할 수 있을 것 같다
'programming > Swift' 카테고리의 다른 글
[Swift/iOS] KeyChain에 저장을 해보자 (0) | 2023.05.06 |
---|---|
[Swift/iOS] 애플 로그인 후 반환 값 ASAuthorizationAppleIDCredential From 공식문서 (0) | 2023.05.06 |
[Swift/iOS] CoreData 사용하기(3) - 데이터 저장하기, 데이터 불러오기 기초 (0) | 2023.05.06 |
[Swift/iOS] CoreData 사용하기(2) - CoreData Stack 설정하기 From 공식문서 (0) | 2023.05.05 |
[Swift/iOS] CoreData 사용하기(1) - 프로젝트 중간에 추가하기, Entity 만들기 (0) | 2023.05.05 |
- Total
- Today
- Yesterday
- Delegate 패턴
- Entity
- ASAuthorizationAppleIDCredential
- autoclosure
- 디자인패턴
- context
- inout 파라미터 메모리 충돌
- 캡쳐리스트
- 클로저
- 강한참조순환
- 클로저표현
- 토큰저장
- core data
- identity Token
- 클로저 강한 참조
- SWIFT
- authorizationCode
- Persistent Container
- 메모리 안정성
- CoreData
- 회원가입
- 강한 참조 순환
- object
- weak
- escaping closrue
- 클로저 축약
- 자동클로저
- Core Data Stack
- ios
- unowned
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |