SwiftUI のTextField で入力できる文字数を制限する

1 min read読了の目安(約500字

「テキストフィールドに入力できる文字をx文字までに制限したい」という場面があります。
Combine フレームワークをインポートし、onReceiveJust パブリッシャーを使うことでその挙動が実現できました。

コード

import SwiftUI
import Combine

let maxCharacterLength = Int(6)

struct YourView: View {
    @State private var text = String("")

    var body: some View {
        TextField("", text: $text)
            .onReceive(Just(text), perform: { _ in
                if maxCharacterLength < text.count {
                    text = String(text.prefix(maxCharacterLength))
                }
            })       
    }
}