Formatter — bu nima, kiritish formatlashlari va NSFormatter

Muallif: IT Sectr Nashr etilgan: 2026-07-08 O'qish vaqti: 8 daq

Formatter iOS'da — bu kiritilgan ma'lumotlarni formatlash mexanizmi bo'lib, u strukturalanmagan matnni avtomatik ravishda belgilangan formatga aylantiradi. NSFormatter va InputMask tizim sinflari telefon raqamlari, kredit kartalari, sanalar va boshqa strukturalangan ma'lumotlarni qayta ishlash imkonini beradi. Apple Foundation Framework Reference (2025) ma'lumotlariga ko'ra, kiritishni to'g'ri formatlash formalarni to'ldirishda xatolar sonini 55% ga kamaytiradi va ma'lumotlarni kiritishni 30% ga tezlashtiradi. Strukturalangan kiritish kutiladigan barcha maydonlar uchun formatterlardan foydalaning — bu foydalanuvchi tajribasini va to'plangan ma'lumotlar sifatini yaxshilaydi.

Asosiysi

  • Formatter — iOS'da kiritilgan ma'lumotlarni berilgan shablonga avtomatik formatlash uchun tizim mexanizmi
  • NSFormatter — NumberFormatter, DateFormatter va boshqalar qurilgan asosiy Foundation abstrakt sinfi
  • Input Mask — telefon raqamlari, kartalar, sanalar va kodlarni formatlash uchun kiritishni maskalash kutubxonasi
  • Phone Number Kit — Apple'dan telefon raqamlarini formatlash va tekshirish uchun framework
  • Kiritish maskalari shablonni aniqlaydi (masalan, +7 (___) ___-__-__) va ajratuvchilarni avtomatik qo'yadi

iOS'da Formatter nima?

Formatter (formatter) iOS'da — bu foydalanuvchi kiritgan xom ma'lumotni berilgan shablonga muvofiq strukturalangan formatga aylantiruvchi komponent. Formani yuborishdan keyingi oddiy tekshirishdan farqli o'laroq, formatter real vaqtda ishlaydi va ma'lumot kiritilayotganda uning ko'rinishini to'g'rilaydi. Bu asosiy farq: foydalanuvchi darhol formatlangan natijani ko'radi, ajratuvchilarni qo'lda kiritish shart emas.

iOS bir nechta formatlash darajalarini taqdim etadi: ma'lumotlarni ko'rsatish uchun Foundation tizim formatterlari (NumberFormatter, DateFormatter, ByteCountFormatter), telefon raqamlari uchun PhoneNumberKit frameworki va ixtiyoriy kiritish maskalari uchun uchinchi tomon InputMask kutubxonalari. Darajani tanlash ma'lumot turiga va kerakli formatlash moslashuvchanligiga bog'liq.

Apple Human Interface Guidelines ma'lumotlariga ko'ra, kiritish formatterlari uchta vazifani hal qiladi: foydalanuvchiga kognitiv yukni kamaytiradi (ajratuvchilar haqida o'ylash shart emas), xatolar sonini kamaytiradi (ma'lumotlar to'g'ri formatda kiritiladi) va formalarni to'ldirishni tezlashtiradi (raqam guruhlari orasida avtomatik o'tish).

Formatterlar mobil qurilmalar uchun ayniqsa muhim, chunki ekran klaviaturasidan kiritish fizik klaviaturaga qaraganda ko'proq harakat talab qiladi. Qo'lda kiritilishi kerak bo'lgan har bir qo'shimcha belgi formani to'ldirish vaqtini oshiradi va xato xavfini keltiradi. Ajratuvchilarni avtomatik qo'yish odatiy formatlar uchun teginishlar sonini 20–40% ga kamaytiradi.

Kiritish formatterlari turlari

Kiritish formatterlari iOS'da uch toifaga bo'linadi: Foundation tizim formatterlari, Apple'ning ixtisoslashgan formatterlari (PhoneNumberKit) va uchinchi tomon kutubxonalari (InputMask, MaskedTextField). Har bir toifa o'z vazifalarini hal qiladi va o'ziga xos qo'llash xususiyatlariga ega.

Foundation tizim formatterlari

NumberFormatter raqamli qiymatlarni formatlaydi: pul summalari, foizlar, ilmiy notatsiyalar. Guruh va o'nlik belgilar ajratuvchilarining lokalizatsiyasini qo'llab-quvvatlaydi. DateFormatter sanalar va vaqtlarni lokalizatsiyalangan qatorlarga aylantiradi. Bu formatterlar ko'rsatish uchun mo'ljallangan, kiritishni maskalash uchun emas, shuning uchun ularni yozish jarayonida to'g'ridan-to'g'ri UITextField'ga qo'llash qiyin.

PhoneNumberKit

PhoneNumberKit — Apple'ning telefon raqamlarini milliy standartlarga muvofiq formatlaydigan kutubxonasi. U kod bo'yicha mamlakatni avtomatik aniqlaydi va tegishli formatni qo'llaydi. Masalan, Rossiya raqami +7 912 345-67-89 Amerikaning +1 212-555-0198 raqamidan boshqacha formatlanadi. PhoneNumberKit shuningdek raqamning to'g'riligini tekshiradi.

Input Mask kutubxonalari

Uchinchi tomon kutubxonalari InputMask har qanday formatlar uchun universal kiritishni maskalash mexanizmini taqdim etadi: karta raqamlari (0000 0000 0000 0000), sanalar (DD.MM.YYYY), SNILS (000-000-000 00), INN (000000000000). Kutubxonalar UITextFieldDelegate delegati orqali ishlaydi, kiritishni ushlab oladi va maskani real vaqtda qo'llaydi.

TurFrameworkVazifaIshlash rejimi
RaqamlarNumberFormatterPul, foizlar, ilmiyKo'rsatish
SanalarDateFormatterSana, vaqt, timestampKo'rsatish
TelefonlarPhoneNumberKitMamlakat standartlari bo'yicha raqamlarKiritish + tekshirish
MaskalarInputMaskKartalar, kodlar, SNILS, INNReal vaqtda kiritish

NSFormatter abstrakt sinfi

NSFormatter — bu iOS'ning barcha tizim formatterlari meros olgan Foundation abstrakt sinfidir. U ikkita asosiy metodni belgilaydi: ob'ektni qatorga aylantirish uchun string(for:) va qatorni ob'ektga teskari aylantirish uchun getObjectValue(_:for:errorDescription:). Bu ikki tomonlama mexanizm ma'lumotlarni ko'rsatish va ularni matn maydonlaridan o'qish imkonini beradi.

Tizim sinflari bilan qoplanmagan o'ziga xos formatlar uchun NSFormatter asosida o'z formatteringizni yaratish mumkin. Buning uchun string(for:) va getObjectValue(_:for:errorDescription:) metodlarini qayta belgilash kerak. O'zingiz yozgan formatterdan formatter xususiyati orqali UILabel, UITextField va boshqa view'lar bilan foydalanish mumkin.

Apple o'z formatterlarini yaratish o'rniga mavjud Foundation formatterlaridan foydalanishni tavsiya qiladi. NumberFormatter 32 til va mintaqaviy standartlarni to'g'ri qayta ishlaydi, DateFormatter turli madaniyatlar kalendarlarini hisobga oladi, ByteCountFormatter esa qiymat kattaligiga qarab baytlar, kilobaytlar va megabaytlar orasida avtomatik almashadi.

NSFormatter shuningdek noto'g'ri kiritishda xato xabarlarini lokalizatsiya qilishni qo'llab-quvvatlaydi. getObjectValue metodi xato tavsifini qaytaradi, uni foydalanuvchiga lokalizatsiyalangan ko'rinishda ko'rsatish mumkin. Bu ayniqsa foydalanuvchi ma'lumotni noto'g'ri formatda kiritadigan formalar uchun muhim — xato xabari tushunarli va interfeys tilida bo'lishi kerak.

Input Mask va kiritishni maskalash

Input Mask (kiritish maskasi) — bu kiritilgan ma'lumotlar formatini aniqlaydigan va terish jarayonida ajratuvchilarni avtomatik qo'yadigan shablon. Maska to'ldiruvchi belgilardan (odatda raqamlar uchun 0 yoki 9, harflar uchun A) va avtomatik qo'yiladigan doimiy belgilardan (qavslar, defislar, probellar) iborat. Foydalanuvchi faqat muhim belgilarni kiritadi, ajratuvchilar esa tizim tomonidan qo'yiladi.

Eng mashhur iOS kutubxonasi — RedMadRobot'ning InputMask kutubxonasi. U shartli, ixtiyoriy blokli va affiksli (prefiks va postfiks) murakkab maskalarni qo'llab-quvvatlaydi. Kutubxona delegat orqali amalga oshirilgan, shuning uchun uni subclassing'siz istalgan UITextField bilan ishlatish mumkin. Telefon raqamlari, bank kartalari, sanalar, tasdiqlash kodlari va boshqa strukturalangan ma'lumotlar uchun maskalar qo'llab-quvvatlanadi.

InputMask maska formati o'z sintaksisidan foydalanadi: majburiy belgilar uchun kvadrat qavslar, ixtiyoriylar uchun jingalak qavslar, qavslar tashqarisidagi doimiy belgilar. Masalan, karta raqami maskasi [0000] [0000] [0000] [0000] ko'rinishida, sana uchun esa — [00]{.}[00]{.}[0000]. Jingalak qavslardagi ixtiyoriy bloklar, agar foydalanuvchi ular uchun ma'lumot kiritmasa, yo'qoladi.

Telefon raqamlari uchun maska odatda affiksga mamlakat kodini o'z ichiga oladi: +7 ([000]) [000]-[00]-[00]. Foydalanuvchi faqat raqamning 10 ta raqamini kiritadi, +7, (, ), - belgilar avtomatik qo'yiladi. Belgini o'chirishda maska backspace'ni to'g'ri qayta ishlaydi, oxirgi muhim belgini o'chiradi va oldingi pozitsiyaga qaytadi.

Telefon raqamlarini formatlash

Telefon raqamlarini formatlash — mobil ilovalarda formatterlardan foydalanishning eng keng tarqalgan stsenariysi. iOS buning uchun kod bo'yicha mamlakatni avtomatik aniqlaydigan va tegishli milliy formatni qo'llaydigan PhoneNumberKit frameworkini taqdim etadi. Kutubxona 200 dan ortiq mamlakatni qo'llab-quvvatlaydi va muntazam yangilanadi.

PhoneNumberKit ikki bosqichda ishlaydi: formatni aniqlash va uni qo'llash. Birinchi bosqichda kutubxona kiritilgan mamlakat kodini tahlil qiladi (masalan, +7 Rossiyani aniqlaydi) va formatlash qoidalarini yuklaydi. Ikkinchi bosqichda milliy standartga mos keladigan maskani qo'llaydi: Rossiya uchun +7 XXX XXX-XX-XX, AQSh uchun +1 XXX-XXX-XXXX, Buyuk Britaniya uchun +44 XXXX XXX XXX.

Apple Developer Documentation ma'lumotlariga ko'ra, iOS 16 dan boshlab UIContentUnavailableConfiguration orqali telefon raqamlarini formatlashning o'rnatilgan mexanizmi paydo bo'ldi. Biroq to'liq real vaqtda formatlash uchun PhoneNumberKit'ni UITextFieldDelegate delegati orqali ishlatish tavsiya etiladi. Kutubxona shuningdek raqamni tekshiradi: raqamlar sonini, mamlakat kodining mumkinligini va milliy formatga mosligini tekshiradi.

Xalqaro ilovalar uchun foydalanuvchi raqamni istalgan formatda kiritishi mumkinligini hisobga olish muhim: +7 bilan, 8 bilan (Rossiya uchun) yoki mamlakat kodisiz. Yaxshi formatter istalgan boshlang'ich formatni taniy oladigan va uni + prefiksi va mamlakat kodi bilan yagona xalqaro standartga normallashtiradigan bo'lishi kerak.

Swift'da formatter qo'llash

Formatter qo'llash Swift'da tanlangan yondashuvga bog'liq. Foundation tizim formatterlari uchun iOS 15 dan boshlab UITextField uchun mavjud bo'lgan formatter xususiyati ishlatiladi. Input Mask uchun InputMask kutubxonasi bilan UITextFieldDelegate delegati ishlatiladi. Telefon raqamlari uchun — delegat orqali PhoneNumberKit.

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
    }
}

NumberFormatter uchun iOS 15+ da UITextField'da formatter xususiyati mavjud bo'lib, u terish jarayonida kiritilgan raqamni avtomatik formatlaydi. Bu yondashuv delegatni amalga oshirishni talab qilmaydi va pul formatlari, foizlar va boshqa raqamli ma'lumotlar uchun foydalanuvchi lokalini hisobga olgan holda «o'zidan» ishlaydi.

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

RedMadRobot'ning InputMask kutubxonasi uchun sozlash maskani ishga tushirish va delegat orqali qo'llash orqali amalga oshiriladi. Kutubxona qo'yish (paste) va o'chirish (backspace) operatsiyalarini qayta ishlashni qo'llab-quvvatlaydi va matn tanlashlar bilan to'g'ri ishlaydi.

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
    }
}

Tez-tez so'raladigan savollar

iOS uchun qaysi formatter kutubxonasi yaxshiroq?

Telefon raqamlari uchun — PhoneNumberKit, umumiy maqsadli maskalar uchun — RedMadRobot'ning InputMask kutubxonasi. Raqamlar va sanalar uchun tizimli NumberFormatter va DateFormatter yetarli.

Formatter UITextView bilan ishlaydimi?

Ha, UITextView UITextField bilan bir xil delegatlar va shouldChangeCharactersIn metodlarini qo'llab-quvvatlaydi. Formatterni UITextViewDelegate delegatini amalga oshirish orqali qo'llash mumkin.

Formatter bilan matn qo'yishni qanday qayta ishlash kerak?

Qo'yish xuddi shu shouldChangeCharactersIn delegati orqali qayta ishlanadi. Yaxshi formatter avval qo'yilgan matndan barcha ajratuvchilarni olib tashlaydi, so'ngra toza ma'lumotlarga maskani qo'llaydi.

Email maydoni uchun formatter kerakmi?

Yo'q, email ajratuvchili sobit formatga ega emas. Email uchun textContentType = .emailAddress va @ belgisi bilan klaviaturani sozlash yetarli.

Formatter unumdorlikka qanday ta'sir qiladi?

Zamonaviy formatterlar kiritishni har bir belgi uchun 1 ms dan kam vaqtda qayta ishlaydi. Kechikish foydalanuvchi uchun sezilmaydi. InputMask va PhoneNumberKit kutubxonalari real vaqtda ishlash uchun optimallashtirilgan.

Xulosalar

  • Formatter — strukturalangan ma'lumotlarni real vaqtda avtomatik formatlash uchun iOS mexanizmi
  • Tizim formatterlari Foundation (NumberFormatter, DateFormatter) raqamlar va sanalar uchun mos keladi
  • PhoneNumberKit — 200+ mamlakat standartlari bo'yicha telefon raqamlarini formatlash uchun yechim
  • Input Mask — har qanday strukturalangan ma'lumotlarni kiritish maskalari uchun universal vosita
  • Kiritish maskalari Apple ma'lumotlariga ko'ra formalarni to'ldirishda xatolar sonini 55% ga kamaytiradi
  • UITextFieldDelegate delegati — formatterning matn maydonlari bilan integratsiyasining asosiy usuli
  • Tavsiya — strukturli ma'lumot formatiga ega barcha maydonlar uchun formatterdan foydalaning

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing