[SwiftUI] @State 속성 초기값 강제 설정

반응형

SwiftUI 에서 많이 사용되는 @State는 보통 내부에서 사용하기 떄문에 초기값을 할당하고 작업하는 경우가 많습니다. 하지만 외부에서 주입해서 사용할 경우 일반 문자열을 대입하면 에러가 발생합니다. 스위프트UI 에서 @State 값을 동적으로 할당하는 방법을 알아보겠습니다.

 

다음 코드를 작성해서 초기값을 설정하려면 다음과 같은 에러가 발생합니다. 


struct PasscodeView: View {
  @State private var passcode: String
  init(code: String) {
    self.passcode = code
  }
}

Error: Cannot assign value of type 'String' to type 'State<String>'

 

"String 문자열을 State 타입에 할당 할 수 없다" 라는 에러가 발생하는 원인은 초기값에 맞지 않는 값을 할당 하기 때문입니다. 

 

 

위의 코드에서 passcode는 String 으로 선언했지만 @State가 붙어서 더이상 평범한 문자열이 아닙니다. 저도 @State를 외부에서 주입 해야 할 때 어떻게 초기화 해야 하는 줄 몰라서 당황했는데 웹에도 별도의 글이 많지 않았습니다. 이유인 즉 너무 당연한 것이기 때문이죠. State<String> 타입에 String을 대입하는게 말이 되지 않습니다. 에러문구만 잘 읽어봐도 해결될 문제입니다

 

다음은 문제를 해결한 초기화 함수입니다.


struct PasscodeView: View {
  @State private var passcode: String
  init(code: String) {
    _passcode = .init(initialValue: code)
  }
}

 

반응형

댓글

Designed by JB FACTORY