Я использую этот код, но xCode не компилируется даже из-за: введите описание изображения здесь

struct ContentView: View {
    
    @State private var stringOfText: String = "Hello, world!"
    let action: () -> Void = { stringOfText = "updated!" }       // <<: Here
    
    var body: some View {
        
        Text(stringOfText)
            .padding()
        
        Button(action: action, label: {
            Text("update")
        })
        
    }
}
0
swiftPunk 13 Фев 2021 в 00:42

1 ответ

Лучший ответ

Определите его как функцию:

struct ContentView: View {
    
    @State private var stringOfText: String = "Hello, world!"
    
    func action() {
        self.stringOfText = "updated!"
    }
    
    var body: some View {
        
        Text(stringOfText)
            .padding()
        
        Button(action: action, label: {
            Text("update")
        })
        
    }
}

Связанный SO о захвате self во время инициализации (что и делает ваш исходный код, определяя закрытие в подобном свойстве): Ссылка на себя в super.init Короче говоря, это сложная вещь, и ее нужно избегать хитрого мышления. Но, к счастью, что-то вроде определения его как функции здесь, похоже, не имеет недостатков.

0
jnpdx 12 Фев 2021 в 22:24