Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
31 |
Tags
- list
- struct
- viewlifecycle
- ScrollView
- NotificationCenter
- array
- self
- apns
- calendar
- 고차함수
- Refresh
- Git
- 화면전환
- mvvm
- segue
- Observer
- class
- http
- error
- SWIFTUI
- IOS
- protocol
- 회고
- 글또
- uikit
- PushNotification
- SWIFT
- singleton
- escaping
- Switch
Archives
- Today
- Total
seong_hye, the developer
오류 해결) Cannot use instance member ' ' within property initializer; property initializers run before 'self' is avaliable 해결 본문
IOS/Error
오류 해결) Cannot use instance member ' ' within property initializer; property initializers run before 'self' is avaliable 해결
seong_hye 2023. 8. 24.
⚠️
Cannot use instance member ' ' within property initializer; property initializers run before 'self' is avaliable
: Swift에서 self를 사용해야 하는 프로퍼티를 초기화 도중에 접근하려고 할 때 발생하는 오류
🔍 발생한 경우
배열을 let으로 생성 후 다른 배열의 값으로 넣어주려고 하다가 발생
struct DataModel {
let title: String
let listData: [Int]
let checkData: Bool
}
struct ContentView: View {
var listData4: [1,2,3]
var allList: DataModel = DataModel(title: "Value", listData: listData4, checkData: false) // error 발생
var body: some View {
...
}
}
✅ 해결 방안
- init()에서 초기화
init() 내부에서 self를 사용할 수 있음으로 오류가 발생하지 않음
struct ContentView: View {
var listData4: [1,2,3]
var allList: DataModel
init() {
self.allList = DataModel(title: "Value", listData: listData4, checkData: false)
}
...
}
- 값을 바로 대입
다른 값을 사용하지 않고 바로 해당 배열을 넣어서 해결하는 방안
단순하지만 복잡한 배열의 경우 오히려 눈에 잘 안 보임
struct ContentView: View {
var allList: DataModel = DataModel(title: "Value", listData: [1,2,3], checkData: false)
...
}
- computed property로 제작
listData4가 바뀌면 allList도 자동으로 반영되도록 수정하는 방안
하지만 allList가 매번 계산되서 큰 데이터일 경우에는 비효율적일 수 있음
struct ContentView: View {
var allList: DataModel {
DataModel(title: "Value", listData: listData4, checkData: false)
}
...
}
✅ 사용한 방안
init()을 활용해 뷰가 뜰 때 값을 받아와서 사용할 수 있도록 하는 방안을 사용
다른 방안도 좋았으나 listData4의 값이 바뀔 경우 바로 적용하고
안전하게 받을 수 있는 방법이 init이라고 판단했기 때문
'IOS > Error' 카테고리의 다른 글
오류 해결) unrecognized selector sent to class 오류 해결 (0) | 2024.01.06 |
---|---|
오류 해결) On branch is up to date with 'origin/브랜치이름'. 오류 해결 (0) | 2024.01.06 |
오류 해결) List Refreshable 오류 (0) | 2022.12.13 |
오류 해결) swift:600: Fatal error: Index out of range (0) | 2022.10.28 |
오류 해결 ) 'Receiver (< >) has no segue with identifier '' 오류 해결 (0) | 2022.10.18 |
Comments