You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中是否有遵循Formatter协议的逗号过滤格式化器?

在Swift中实现过滤指定子串的Formatter

Swift标准库及系统框架里没有现成的、专门用于过滤指定子串的Formatter实现,你可以自定义一个遵循Formatter协议的类来满足需求,刚好适配SwiftUI中带Formatter参数的TextField初始化器。

自定义过滤Formatter实现

import Foundation

class FilteringFormatter: Formatter {
    private let filterClosure: (String) -> String
    
    init(filter: @escaping (String) -> String) {
        self.filterClosure = filter
        super.init()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func string(for obj: Any?) -> String? {
        guard let inputString = obj as? String else { return nil }
        return filterClosure(inputString)
    }
    
    override func getObjectValue(_ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?, for string: String, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {
        let filteredString = filterClosure(string)
        obj?.pointee = filteredString as AnyObject
        return true
    }
}

你的示例实现调整

按照你想要的方式,可以这样定义静态属性:

static let myCommaFilter: FilteringFormatter = {
    FilteringFormatter(filter: { input in
        input.replacingOccurrences(of: ",", with: "")
    })
}()

SwiftUI TextField使用示例

直接把这个自定义Formatter传入TextField即可实现输入时自动过滤逗号:

import SwiftUI

struct ContentView: View {
    @State private var inputText = ""
    
    static let myCommaFilter: FilteringFormatter = {
        FilteringFormatter(filter: { $0.replacingOccurrences(of: ",", with: "") })
    }()
    
    var body: some View {
        TextField("输入内容(自动过滤逗号)", text: $inputText, formatter: Self.myCommaFilter)
            .padding()
            .border(Color.gray)
    }
}

这个自定义FilteringFormatter不仅可以过滤逗号,还能通过传入不同的闭包实现任意字符串替换逻辑,比如过滤其他符号或子串。

内容的提问来源于stack exchange,提问作者andrewz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:47:03