73599


<https://stackoverflow.com/a/56450675/1979953> を参考に

コード参考サイトほぼそのまま：

[code]

    import SwiftUI
    
    struct ContentView: View {
        @State var text: String = ""
    
        var body: some View {
            HStack {
                TextField($text,
                          placeholder: Text("type something here..."))
                Button(action: {
                    // Closure will be called once user taps your button
                    print(self.$text)
                }) {
                    Text("SEND")
                }
            }
        }
    }
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }
    
[/code]

としました。

[code]

    Initializer 'init(_:text:onEditingChanged:onCommit:)' requires that 'Binding<String>' conform to 'StringProtocol'
    
[/code]

というエラーと

[code]

    Extra argument 'placeholder' in call
    
[/code]

が出ます。

なにかSwiftのバージョンによる違いでしょうか？ それとも何か他に設定しないといけないことがありますでしょうか？


CC BY-SA 4.0
2021-01-27T06:18:18.100
73597
2021-01-27T07:04:36.057
9008
question
swift swiftui
Initializer 'init(_:text:onEditingChanged:onCommit:)' requires that 'Binding<String>' conform to 'StringProtocol' が起こる


> なにかSwiftのバージョンによる違いでしょうか？

参考記事はタイムスタンプから見て、WWDC
2019で最初のSwiftUIが発表された直後の記事、つまりβ版のSwiftUIを元に書かれたもののようです。おそらくβ版では`TextField`のイニシャライザの引数のデータ型や順番が正式版とは異なっていたのでしょう。

現在のSwiftUIに基づいて書くと次のようになります。

[code]

    struct ContentView: View {
        @State var text: String = ""
    
        var body: some View {
            HStack {
                //# Placeholder文字列が先、textへのBindingが後
                TextField("type something here...", text: $text)
                Button(action: {
                    // Closure will be called once user taps your button
                    print(self.$text)
                }) {
                    Text("SEND")
                }
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2021-01-27T07:04:36.057
73599
2021-01-27T07:04:36.057
13972
73597
answer