>source

다음 코드가 있습니다.

@State var message: String = ""
var body: some View {
        VStack {
            ZStack(alignment: .topLeading) {
                TextEditor(text: Binding($message))
                    .frame(minHeight: 30, alignment: .leading)
                    .cornerRadius(6.0)
                    .multilineTextAlignment(.leading)
                Text(message ?? "Message")
                    .padding(.leading, 4)
                    .opacity(message == "" ? 1 : 0)
                }
                .font(.body)
        }
    }
}

코드를 실행하려고하면 "Cannot convert value of type 'Binding<String?>' to expected argument type 'Binding<String>'" 옆에 TextEditor(text: Binding($message) 이 오류가 발생하는 이유는 무엇입니까?

  • 답변 # 1

    이 줄에서 오류가 발생했습니다.

    Text(message ?? "Message")
    
    

    컴파일러가 유형을 추론하려고 시도하고이 행은 유형이 선택 사항이어야하지만 편집기는 선택 사항이 아니라고 예상하므로 충돌과 오류가 발생합니다. 너의 message state는 선택 사항이 아니므로 초기화 프로그램에서 직접 기본값을 이동하면됩니다.

    수정 된 변형은 다음과 같습니다.

    struct DemoView: View {
        @State var message: String = "Message"
        
        var body: some View {
            VStack {
                ZStack(alignment: .topLeading) {
                    TextEditor(text: $message)
                        .frame(minHeight: 30, alignment: .leading)
                        .cornerRadius(6.0)
                        .multilineTextAlignment(.leading)
                    Text(message)
                        .padding(.leading, 4)
                        .opacity(message == "" ? 1 : 0)
                }
                .font(.body)
            }
        }
    }
    
    

관련 자료

  • 이전 c++ - 'optional' - visual studio에서 'std'의 멤버가 아닙니다
  • 다음 python - 목록의 1 개 인수가 4 개 인수가되도록합니다