Formatter — apa itu, formatter masukan dan NSFormatter

Penulis: IT Sectr Diterbitkan: 2026-07-08 Waktu membaca: 8 mnt

Formatter di iOS — ini adalah mekanisme pemformatan data yang dimasukkan yang secara otomatis mengubah teks tidak terstruktur menjadi format yang ditentukan. Kelas sistem NSFormatter dan InputMask memungkinkan penanganan nomor telepon, kartu kredit, tanggal dan data terstruktur lainnya. Menurut Apple Foundation Framework Reference (2025), pemformatan masukan yang benar mengurangi jumlah kesalahan saat mengisi formulir sebesar 55% dan mempercepat pemasukan data sebesar 30%. Gunakan formatter untuk semua kolom yang mengharapkan masukan terstruktur — ini meningkatkan pengalaman pengguna dan kualitas data yang dikumpulkan.

Poin utama

  • Formatter — mekanisme sistem iOS untuk memformat data masukan secara otomatis ke dalam template yang ditentukan
  • NSFormatter — kelas abstrak Foundation yang menjadi dasar NumberFormatter, DateFormatter dan lainnya
  • Input Mask — pustaka masking masukan untuk memformat nomor telepon, kartu, tanggal dan kode
  • Phone Number Kit — framework dari Apple untuk memformat dan memvalidasi nomor telepon
  • Masker masukan menentukan template (misalnya +7 (___) ___-__-__) dan secara otomatis menambahkan pemisah

Apa itu Formatter di iOS?

Formatter di iOS — ini adalah komponen yang mengubah masukan pengguna mentah menjadi format terstruktur sesuai template yang ditentukan. Berbeda dengan validasi sederhana setelah mengirim formulir, formatter bekerja secara real-time, mengoreksi tampilan data saat data dimasukkan. Ini adalah perbedaan utama: pengguna melihat hasil yang diformat segera, tanpa perlu memasukkan pemisah secara manual.

iOS menyediakan beberapa tingkat pemformatan: formatter sistem Foundation (NumberFormatter, DateFormatter, ByteCountFormatter) untuk menampilkan data, framework PhoneNumberKit untuk nomor telepon, dan pustaka pihak ketiga InputMask untuk masker masukan apa pun. Pemilihan tingkat bergantung pada jenis data dan fleksibilitas pemformatan yang dibutuhkan.

Menurut Apple Human Interface Guidelines, formatter masukan menyelesaikan tiga tugas: mengurangi beban kognitif pengguna (tidak perlu memikirkan pemisah), mengurangi jumlah kesalahan (data dimasukkan dalam format yang benar) dan mempercepat pengisian formulir (transisi otomatis antar kelompok angka).

Formatter sangat penting untuk perangkat seluler, di mana masukan melalui keyboard layar membutuhkan lebih banyak usaha daripada keyboard fisik. Setiap karakter tambahan yang harus dimasukkan secara manual meningkatkan waktu pengisian formulir dan risiko kesalahan. Penggantian pemisah secara otomatis mengurangi jumlah ketukan sebesar 20–40% untuk format umum.

Jenis-jenis formatter masukan

Formatter masukan di iOS dibagi menjadi tiga kategori: formatter sistem Foundation, formatter khusus Apple (PhoneNumberKit) dan pustaka pihak ketiga (InputMask, MaskedTextField). Setiap kategori menyelesaikan tugasnya sendiri dan memiliki karakteristik implementasi tersendiri.

Formatter sistem Foundation

NumberFormatter memformat nilai numerik: jumlah uang, persentase, notasi ilmiah. Mendukung lokalisasi pemisah kelompok dan desimal. DateFormatter mengubah tanggal dan waktu menjadi string yang dilokalkan. Formatter ini ditujukan untuk tampilan, bukan masking masukan, sehingga sulit diterapkan langsung ke UITextField saat mengetik.

PhoneNumberKit

PhoneNumberKit — ini adalah pustaka Apple untuk memformat nomor telepon sesuai standar nasional. Pustaka ini secara otomatis menentukan negara berdasarkan kode dan menerapkan format yang sesuai. Misalnya, nomor Rusia +7 912 345-67-89 diformat berbeda dari nomor Amerika +1 212-555-0198. PhoneNumberKit juga memvalidasi nomor untuk kebenarannya.

Pustaka Input Mask

Pustaka pihak ketiga InputMask menyediakan mekanisme universal untuk masking masukan pada format apa pun: nomor kartu (0000 0000 0000 0000), tanggal (DD.MM.YYYY), SNILS (000-000-000 00), INN (000000000000). Pustaka bekerja melalui delegasi UITextFieldDelegate, mencegat masukan dan menerapkan masker secara real-time.

JenisFrameworkTujuanMode kerja
AngkaNumberFormatterUang, persentase, ilmiahTampilan
TanggalDateFormatterTanggal, waktu, timestampTampilan
TeleponPhoneNumberKitNomor sesuai standar negaraMasukan + validasi
MaskerInputMaskKartu, kode, SNILS, INNMasukan real-time

Kelas abstrak NSFormatter

NSFormatter — ini adalah kelas abstrak Foundation yang diwarisi oleh semua formatter sistem iOS. Kelas ini mendefinisikan dua metode utama: string(for:) untuk mengubah objek menjadi string dan getObjectValue(_:for:errorDescription:) untuk mengubah kembali string menjadi objek. Mekanisme dua arah ini memungkinkan menampilkan data sekaligus membacanya dari kolom teks.

Membuat formatter sendiri berdasarkan NSFormatter dimungkinkan untuk format khusus yang tidak tercakup oleh kelas sistem. Untuk ini, perlu mengesampingkan metode string(for:) dan getObjectValue(_:for:errorDescription:). Formatter buatan sendiri dapat digunakan dengan UILabel, UITextField dan view lain melalui properti formatter.

Apple merekomendasikan menggunakan formatter yang sudah ada dari Foundation daripada membuat sendiri. NumberFormatter menangani 32 bahasa dan standar regional dengan benar, DateFormatter memperhitungkan kalender berbagai budaya, dan ByteCountFormatter secara otomatis beralih antara byte, kilobyte dan megabyte tergantung pada besar nilainya.

NSFormatter juga mendukung lokalisasi pesan kesalahan saat masukan tidak valid. Metode getObjectValue mengembalikan deskripsi kesalahan yang dapat ditampilkan kepada pengguna dalam bentuk terlokalisasi. Ini sangat penting untuk formulir di mana pengguna memasukkan data dalam format yang salah — pesan kesalahan harus jelas dan dalam bahasa antarmuka.

Input Mask dan masking masukan

Input Mask (masker masukan) — ini adalah template yang menentukan format data yang dimasukkan dan secara otomatis menambahkan pemisah saat mengetik. Masker terdiri dari karakter placeholder (biasanya 0 atau 9 untuk angka, A untuk huruf) dan karakter konstan (tanda kurung, tanda hubung, spasi) yang disisipkan secara otomatis. Pengguna hanya memasukkan karakter yang berarti, sedangkan pemisah ditambahkan oleh sistem.

Pustaka paling populer untuk iOS — InputMask dari RedMadRobot. Pustaka ini mendukung masker kompleks dengan kondisi, blok opsional dan afiks (prefiks dan postfiks). Pustaka diimplementasikan melalui delegasi, sehingga dapat digunakan dengan UITextField mana pun tanpa subclassing. Masker untuk nomor telepon, kartu bank, tanggal, kode verifikasi dan data terstruktur lainnya didukung.

Format masker InputMask menggunakan sintaks sendiri: tanda kurung siku untuk karakter wajib, kurung kurawal untuk opsional, karakter konstan di luar tanda kurung. Misalnya, masker untuk nomor kartu terlihat seperti [0000] [0000] [0000] [0000], dan untuk tanggal — [00]{.}[00]{.}[0000]. Blok opsional dalam kurung kurawal hilang jika pengguna tidak memasukkan data untuknya.

Untuk nomor telepon, masker biasanya menyertakan kode negara dalam afiks: +7 ([000]) [000]-[00]-[00]. Pengguna hanya memasukkan 10 digit nomor, sedangkan karakter +7, (, ), - ditambahkan secara otomatis. Saat menghapus karakter, masker menangani backspace dengan benar, menghapus karakter terakhir yang berarti dan kembali ke posisi sebelumnya.

Memformat nomor telepon

Memformat nomor telepon — ini adalah skenario penggunaan formatter yang paling umum di aplikasi seluler. iOS menyediakan framework PhoneNumberKit untuk ini, yang secara otomatis menentukan negara berdasarkan kode dan menerapkan format nasional yang sesuai. Pustaka mendukung lebih dari 200 negara dan diperbarui secara berkala.

PhoneNumberKit bekerja dalam dua tahap: menentukan format dan menerapkannya. Pada tahap pertama, pustaka menganalisis kode negara yang dimasukkan (misalnya, +7 menentukan Rusia) dan memuat aturan pemformatan. Pada tahap kedua, pustaka menerapkan masker yang sesuai dengan standar nasional: untuk Rusia ini +7 XXX XXX-XX-XX, untuk AS — +1 XXX-XXX-XXXX, untuk Inggris — +44 XXXX XXX XXX.

Menurut Apple Developer Documentation, sejak iOS 16 muncul mekanisme bawaan untuk memformat nomor telepon melalui UIContentUnavailableConfiguration. Namun untuk pemformatan real-time yang lengkap, disarankan menggunakan PhoneNumberKit melalui delegasi UITextFieldDelegate. Pustaka juga memvalidasi nomor: memeriksa jumlah digit, kelayakan kode negara dan kesesuaian dengan format nasional.

Untuk aplikasi internasional, penting untuk memperhitungkan bahwa pengguna dapat memasukkan nomor dalam format apa pun: dengan +7, dengan 8 (untuk Rusia) atau tanpa kode negara. Formatter yang baik harus mengenali format awal apa pun dan menormalkannya ke satu standar internasional dengan awalan + dan kode negara.

Implementasi formatter di Swift

Implementasi formatter di Swift bergantung pada pendekatan yang dipilih. Untuk formatter sistem Foundation digunakan properti formatter, yang tersedia sejak iOS 15 untuk UITextField. Untuk Input Mask digunakan delegasi UITextFieldDelegate dengan pustaka InputMask. Untuk nomor telepon — PhoneNumberKit melalui delegasi.

swift
import PhoneNumberKit

class PhoneViewController: UIViewController {

    let phoneNumberKit = PhoneNumberKit()
    @IBOutlet var phoneField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        phoneField.delegate = self
    }
}

extension PhoneViewController: UITextFieldDelegate {
    func textField(
        _ textField: UITextField,
        shouldChangeCharactersIn range: NSRange,
        replacementString string: String
    ) -> Bool {
        guard let text = textField.text else { return true }
        let partial = (text as NSString).replacingCharacters(in: range, with: string)
        textField.text = partial.applyPhoneMask()
        return false
    }
}

Untuk NumberFormatter sejak iOS 15+ tersedia properti formatter di UITextField yang secara otomatis memformat angka yang dimasukkan saat mengetik. Pendekatan ini tidak memerlukan implementasi delegasi dan bekerja 'langsung' untuk format uang, persentase dan data numerik lainnya dengan memperhitungkan locale pengguna.

swift
let amountField = UITextField()
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "ru_RU")
amountField.formatter = formatter

Untuk pustaka InputMask dari RedMadRobot, konfigurasi dilakukan dengan menginisialisasi masker dan menerapkannya melalui delegasi. Pustaka mendukung penanganan penempelan (paste), penghapusan (backspace) dan bekerja dengan benar dengan pemilihan teks.

swift
import InputMask

class CardViewController: UIViewController {
    @IBOutlet var cardField: UITextField!
    var listener: MaskedTextFieldDelegate!

    override func viewDidLoad() {
        super.viewDidLoad()
        listener = MaskedTextFieldDelegate(
            primaryMaskFormat: "[0000] [0000] [0000] [0000]"
        )
        cardField.delegate = listener
    }
}

Pertanyaan yang sering diajukan

Pustaka formatter mana yang terbaik untuk iOS?

Untuk nomor telepon — PhoneNumberKit, untuk masker tujuan umum — InputMask dari RedMadRobot. Untuk angka dan tanggal cukup menggunakan NumberFormatter dan DateFormatter sistem.

Apakah formatter bekerja dengan UITextView?

Ya, UITextView mendukung delegasi dan metode shouldChangeCharactersIn yang sama dengan UITextField. Formatter dapat diterapkan melalui implementasi delegasi UITextViewDelegate.

Bagaimana menangani penempelan teks dengan formatter?

Penempelan ditangani melalui delegasi yang sama, shouldChangeCharactersIn. Formatter yang baik terlebih dahulu menghapus semua pemisah dari teks yang ditempel, kemudian menerapkan masker ke data bersih.

Apakah formatter diperlukan untuk kolom email?

Tidak, email tidak memiliki format tetap dengan pemisah. Untuk email cukup mengatur textContentType = .emailAddress dan keyboard dengan simbol @.

Bagaimana formatter memengaruhi kinerja?

Formatter modern memproses masukan dalam kurang dari 1 ms per karakter. Keterlambatan tidak terlihat oleh pengguna. Pustaka InputMask dan PhoneNumberKit dioptimalkan untuk kerja real-time.

Ringkasan

  • Formatter — mekanisme iOS untuk memformat data terstruktur secara otomatis secara real-time
  • Formatter sistem Foundation (NumberFormatter, DateFormatter) cocok untuk angka dan tanggal
  • PhoneNumberKit — solusi untuk memformat nomor telepon sesuai standar 200+ negara
  • Input Mask — alat universal untuk masker masukan data terstruktur apa pun
  • Masker masukan mengurangi jumlah kesalahan saat mengisi formulir sebesar 55% menurut data Apple
  • Delegasi UITextFieldDelegate — cara utama mengintegrasikan formatter dengan kolom teks
  • Rekomendasi — gunakan formatter untuk semua kolom dengan format data terstruktur

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga