Swiftui 停止文本字段中没有数字格式的字符重复

Swiftui 停止文本字段中没有数字格式的字符重复,swiftui,Swiftui,例如,在文本字段中,我希望能够重复所有数字,但用户只能使用小数点一次。因此,用户应该不能执行“12…4”,而只能执行一次“12.4”。有什么特别的方法吗?是否可以在不使用UIKit的情况下使用SwiftUI import SwiftUI import Combine struct TipsView: View { @State private var amount = "" var body: some View { Navigat

例如,在文本字段中,我希望能够重复所有数字,但用户只能使用小数点一次。因此,用户应该不能执行“12…4”,而只能执行一次“12.4”。有什么特别的方法吗?是否可以在不使用UIKit的情况下使用SwiftUI

import SwiftUI
import Combine

struct TipsView: View {
    @State private var amount = ""
    
    var body: some View {
        NavigationView {
            Form {
                Section (header: Text("Amount")) {
                    HStack (spacing: 1) {
                        Text("£")
                        TextField("Amount", text: $amount)
                            .onReceive(Just(amount)) { _ in
                                
                            }
                    }
                }
            }
        }
    }
}

我使用了字符串分隔符将输入字符串分隔成两个不同的数组。也就是说,一个数组包含小数点之前的值,另一个数组包含小数点之后的值

import SwiftUI

struct DecimalView: View {
    @State private var amount = ""
    var body: some View {
        Form {
            Section(header: Text("Amount")) {
                HStack {
                    Text("£")
                    TextField("Enter amount", text: $amount)
                        .onChange(of: amount) { _ in
                            let filtered = amount.filter {"0123456789.".contains($0)}
                            
                            if filtered.contains(".") {
                                let splitted = filtered.split(separator: ".")
                                if splitted.count >= 2 {
                                    let preDecimal = String(splitted[0])
                                    let afterDecimal = String(splitted[1])
                                    amount = "\(preDecimal).\(afterDecimal)"
                                }
                            }
                        }
                }
            }
        }
    }
}

就我在您的案例(包括之前发布的案例)中看到的预期行为而言,最好退后一步,使用UITextField+Delegate完成所有这些操作,并将结果包装在uiviewsrepresentable中。听起来很公平,谢谢