Formatter — bu nədir, giriş formatlayıcıları və NSFormatter

Müəllif: IT Sectr Dərc olunub: 2026-07-08 Oxuma vaxtı: 8 dəq

Formatter iOS-da daxil edilən məlumatların formatlanması mexanizmidir, o qeyri-strukturlu mətni avtomatik olaraq müəyyən edilmiş formata çevirir. Sistem sinifləri NSFormatter və InputMask telefon nömrələri, kredit kartları, tarixlər və digər strukturlu məlumatları emal etməyə imkan verir. Apple Foundation Framework Reference (2025) məlumatına görə, düzgün giriş formatlaması formların doldurulmasında səhvlərin sayını 55% azaldır və məlumat daxil etməni 30% sürətləndirir. Strukturlu giriş gözlənilən bütün sahələr üçün formatlayıcılardan istifadə edin — bu istifadəçi təcrübəsini və toplanan məlumatların keyfiyyətini yaxşılaşdırır.

Əsas məqamlar

  • Formatter — iOS-da daxil edilən məlumatların müəyyən şablona uyğun avtomatik formatlanması üçün sistem mexanizmi
  • NSFormatter — NumberFormatter, DateFormatter və digərlərinin əsasında qurulduğu Foundation-ın abstrakt sinfi
  • Input Mask — telefon nömrələri, kartlar, tarixlər və kodların formatlanması üçün giriş maskalama kitabxanası
  • Phone Number Kit — Apple-dan telefon nömrələrinin formatlanması və validasiyası üçün freymvork
  • Giriş maskaları şablonu müəyyən edir (məsələn, +7 (___) ___-__-__) və avtomatik olaraq ayırıcıları yerləşdirir

iOS-da Formatter nədir?

Formatter iOS-da istifadəçinin daxil etdiyi məlumatları müəyyən şablona uyğun strukturlu formata çevirən komponentdir. Formanın göndərilməsindən sonra sadə validasiyadan fərqli olaraq, formatlayıcı real vaxt rejimində işləyir, məlumat daxil edildikcə onların göstərilməsini düzəldir. Bu əsas fərqdir: istifadəçi dərhal formatlanmış nəticəni görür, ayırıcıları əl ilə daxil etməyə ehtiyac yoxdur.

iOS bir neçə formatlama səviyyəsi təmin edir: məlumatların göstərilməsi üçün sistem Foundation formatlayıcıları (NumberFormatter, DateFormatter, ByteCountFormatter), telefon nömrələri üçün PhoneNumberKit freymvorku və ixtiyari giriş maskaları üçün üçüncü tərəf InputMask kitabxanaları. Səviyyənin seçimi məlumat növündən və tələb olunan formatlama elastikliyindən asılıdır.

Apple Human Interface Guidelines-ə görə, giriş formatlayıcıları üç vəzifəni həll edir: istifadəçinin idrak yükünü azaldır (ayırıcılar haqqında düşünmək lazım deyil), səhvlərin sayını azaldır (məlumatlar düzgün formatda daxil edilir) və formların doldurulmasını sürətləndirir (rəqəm qrupları arasında avtomatik keçid).

Formatlayıcılar mobil cihazlar üçün xüsusilə vacibdir, burada ekran klaviaturası ilə məlumat daxil etmək fiziki klaviaturadan daha çox səy tələb edir. Əl ilə daxil edilməli olan hər əlavə simvol formanın doldurulma vaxtını və səhv riskini artırır. Ayırıcıların avtomatik yerləşdirilməsi tipik formatlar üçün toxunma sayını 20–40% azaldır.

Giriş formatlayıcılarının növləri

Giriş formatlayıcıları iOS-da üç kateqoriyaya bölünür: sistem Foundation formatlayıcıları, ixtisaslaşmış Apple formatlayıcıları (PhoneNumberKit) və üçüncü tərəf kitabxanaları (InputMask, MaskedTextField). Hər kateqoriya öz vəzifələrini həll edir və tətbiq xüsusiyyətlərinə malikdir.

Sistem Foundation formatlayıcıları

NumberFormatter ədədi dəyərləri formatlayır: pul məbləğləri, faizlər, elmi notasiyalar. Qrup ayırıcılarının və onluq işarələrin lokallaşdırılmasını dəstəkləyir. DateFormatter tarix və vaxtı lokallaşdırılmış sətirlərə çevirir. Bu formatlayıcılar göstərmək üçün nəzərdə tutulub, giriş maskalaması üçün deyil, ona görə də onları birbaşa UITextField-ə yazma prosesində tətbiq etmək çətindir.

PhoneNumberKit

PhoneNumberKit — milli standartlara uyğun telefon nömrələrinin formatlanması üçün Apple kitabxanası. O, kod əsasında ölkəni avtomatik müəyyən edir və müvafiq formatı tətbiq edir. Məsələn, Rusiya nömrəsi +7 912 345-67-89 Amerika nömrəsi +1 212-555-0198-dən fərqli formatlanır. PhoneNumberKit həmçinin nömrəni düzgünlük üçün validasiya edir.

Input Mask kitabxanaları

Üçüncü tərəf kitabxanaları InputMask istənilən formatlar üçün universal giriş maskalama mexanizmi təmin edir: kart nömrələri (0000 0000 0000 0000), tarixlər (GG.AA.YYYY), VÖEN (000000000000). Kitabxanalar UITextFieldDelegate vasitəsilə işləyir, daxil edilən məlumatı yaxalayır və maskanı real vaxtda tətbiq edir.

NövFreymvorkTəyinatİş rejimi
RəqəmlərNumberFormatterPul, faiz, elmiGöstərmə
TarixlərDateFormatterTarix, vaxt, zaman damğasıGöstərmə
TelefonlarPhoneNumberKitÖlkə standartlarına uyğun nömrələrDaxiletmə + validasiya
MaskalarInputMaskKartlar, kodlar, VÖENReal vaxtda daxiletmə

Abstrakt sinif NSFormatter

NSFormatter — bütün sistem iOS formatlayıcılarının varis aldığı Foundation-ın abstrakt sinfidir. O, iki əsas metodu müəyyən edir: obyekti sətirə çevirmək üçün string(for:) və sətri yenidən obyektə çevirmək üçün getObjectValue(_:for:errorDescription:). Bu ikitərəfli mexanizm həm məlumatları göstərməyə, həm də mətn sahələrindən oxumağa imkan verir.

Sistem sinifləri ilə əhatə olunmayan spesifik formatlar üçün NSFormatter əsasında öz formatlayıcısının yaradılması mümkündür. Bunun üçün string(for:) və getObjectValue(_:for:errorDescription:) metodlarını yenidən təyin etmək lazımdır. Öz formatlayıcısı formatter xassəsi vasitəsilə UILabel, UITextField və digər görünüşlərlə istifadə edilə bilər.

Apple öz formatlayıcıları yaratmaq əvəzinə mövcud Foundation formatlayıcılarından istifadə etməyi tövsiyə edir. NumberFormatter 32 dili və regional standartları düzgün emal edir, DateFormatter müxtəlif mədəniyyətlərin təqvimlərini nəzərə alır, ByteCountFormatter isə dəyərin böyüklüyündən asılı olaraq bayt, kilobayt və meqabayt arasında avtomatik keçid edir.

NSFormatter həmçinin səhv daxiletmə zamanı səhv mesajlarının lokallaşdırılmasını dəstəkləyir. getObjectValue metodu istifadəçiyə lokallaşdırılmış formada göstərilə bilən səhv təsvirini qaytarır. Bu, istifadəçinin səhv formatda məlumat daxil etdiyi formalar üçün xüsusilə vacibdir — səhv mesajı aydın və interfeys dilində olmalıdır.

Input Mask və giriş maskalaması

Input Mask (giriş maskası) — daxil edilən məlumatların formatını müəyyən edən və yazma zamanı ayırıcıları avtomatik yerləşdirən şablondur. Maska doldurucu simvollardan (adətən rəqəmlər üçün 0 və ya 9, hərflər üçün A) və avtomatik daxil edilən sabit simvollardan (mötərizələr, defislər, boşluqlar) ibarətdir. İstifadəçi yalnız əhəmiyyətli simvolları daxil edir, ayırıcılar isə sistem tərəfindən yerləşdirilir.

iOS üçün ən populyar kitabxana — RedMadRobot-un InputMask-ı. O, şərtlər, isteğe bağlı bloklar və affiks (prefiks və suffiks) ilə mürəkkəb maskaları dəstəkləyir. Kitabxana delegat vasitəsilə tətbiq edilir, bu da onu subclassing olmadan istənilən UITextField ilə istifadə etməyə imkan verir. Telefon nömrələri, bank kartları, tarixlər, təsdiq kodları və digər strukturlu məlumatlar üçün maskalar dəstəklənir.

InputMask maska formatı öz sintaksisindən istifadə edir: məcburi simvollar üçün kvadrat mötərizələr, isteğe bağlılar üçün qıvrım mötərizələr, mötərizələr xaricində sabit simvollar. Məsələn, kart nömrəsi üçün maska [0000] [0000] [0000] [0000] kimi, tarix üçün isə [00]{.}[00]{.}[0000] kimi görünür. Qıvrım mötərizələrdəki isteğe bağlı bloklar istifadəçi onlar üçün məlumat daxil etmədikdə yox olur.

Telefon nömrələri üçün maska adətən affiksdə ölkə kodunu ehtiva edir: +7 ([000]) [000]-[00]-[00]. İstifadəçi nömrənin yalnız 10 rəqəmini daxil edir, +7, (, ), - simvolları isə avtomatik yerləşdirilir. Simvol silinərkən maska backspace-i düzgün emal edir, son əhəmiyyətli simvolu silir və əvvəlki mövqeyə qayıdır.

Telefon nömrələrinin formatlanması

Telefon nömrələrinin formatlanması — mobil tətbiqlərdə formatlayıcılardan istifadənin ən çox yayılmış ssenarisidir. iOS bunun üçün PhoneNumberKit freymvorkunu təmin edir, o kod əsasında ölkəni avtomatik müəyyən edir və müvafiq milli formatı tətbiq edir. Kitabxana 200-dən çox ölkəni dəstəkləyir və müntəzəm yenilənir.

PhoneNumberKit iki mərhələdə işləyir: formatın müəyyən edilməsi və tətbiqi. Birinci mərhələdə kitabxana daxil edilmiş ölkə kodunu təhlil edir (məsələn, +7 Rusiyanı müəyyən edir) və formatlama qaydalarını yükləyir. İkinci mərhələdə milli standarta uyğun maska tətbiq edir: Rusiya üçün +7 XXX XXX-XX-XX, ABŞ üçün — +1 XXX-XXX-XXXX, Böyük Britaniya üçün — +44 XXXX XXX XXX.

Apple Developer Documentation-a görə, iOS 16-dan etibarən UIContentUnavailableConfiguration vasitəsilə telefon nömrələrinin formatlanması üçün daxili mexanizm meydana çıxdı. Lakin real vaxtda tam formatlama üçün UITextFieldDelegate vasitəsilə PhoneNumberKit-dən istifadə etmək tövsiyə olunur. Kitabxana həmçinin nömrəni validasiya edir: rəqəmlərin sayını, ölkə kodunun icazəliliyini və milli formata uyğunluğu yoxlayır.

Beynəlxalq tətbiqlər üçün istifadəçinin nömrəni istənilən formatda daxil edə biləcəyini nəzərə almaq vacibdir: +7, 8 (Rusiya üçün) və ya ölkə kodu olmadan. Yaxşı formatlayıcı istənilən ilkin formatı tanımalı və onu + prefiksi və ölkə kodu ilə vahid beynəlxalq standarta normallaşdırmalıdır.

Swift-də formatlayıcının tətbiqi

Formatlayıcının tətbiqi Swift-də seçilmiş yanaşmadan asılıdır. Sistem Foundation formatlayıcıları üçün iOS 15-dən etibarən UITextField üçün mövcud olan formatter xassəsindən istifadə olunur. Input Mask üçün InputMask kitabxanası ilə UITextFieldDelegate delegatından istifadə olunur. Telefon nömrələri üçün — delegat vasitəsilə 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 üçün iOS 15+-da UITextField-də formatter xassəsi mövcuddur, o yazma zamanı daxil edilən rəqəmi avtomatik formatlayır. Bu yanaşma delegat tətbiqi tələb etmir və istifadəçinin lokallaşdırmasını nəzərə alaraq pul formatları, faizlər və digər ədədi məlumatlar üçün "kutudan çıxmış" işləyir.

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

InputMask kitabxanası RedMadRobot üçün konfiqurasiya maskanın inisializasiyası və delegat vasitəsilə tətbiqi ilə həyata keçirilir. Kitabxana yapışdırma (paste), silmə (backspace) əməliyyatlarını dəstəkləyir və mətn seçimləri ilə düzgün işləyir.

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 verilən suallar

iOS üçün hansı formatlayıcı kitabxanası daha yaxşıdır?

Telefon nömrələri üçün — PhoneNumberKit, ümumi təyinatlı maskalar üçün — RedMadRobot-dan InputMask. Rəqəmlər və tarixlər üçün sistem NumberFormatter və DateFormatter kifayət edir.

Formatlayıcı UITextView ilə işləyirmi?

Bəli, UITextView UITextField ilə eyni delegatları və shouldChangeCharactersIn metodlarını dəstəkləyir. Formatlayıcı UITextViewDelegate delegatının tətbiqi vasitəsilə tətbiq edilə bilər.

Formatlayıcı ilə mətn yapışdırılmasını necə emal etməli?

Yapışdırma eyni shouldChangeCharactersIn delegatı vasitəsilə emal edilir. Yaxşı formatlayıcı əvvəlcə yapışdırılmış mətndən bütün ayırıcıları silir, sonra təmiz məlumatlara maska tətbiq edir.

Email sahəsi üçün formatlayıcı lazımdırmı?

Xeyr, email ayırıcıları olan sabit formata malik deyil. Email üçün textContentType = .emailAddress və @ simvolu olan klaviatura qurmaq kifayətdir.

Formatlayıcı performansa necə təsir edir?

Müasir formatlayıcılar daxiletməni simvol başına 1 ms-dən az müddətdə emal edir. Gecikmə istifadəçi üçün hiss olunmazdır. InputMask və PhoneNumberKit kitabxanaları real vaxt rejimində iş üçün optimallaşdırılıb.

Xülasə

  • Formatter — iOS-da real vaxtda strukturlu məlumatların avtomatik formatlanması mexanizmi
  • Sistem formatlayıcıları Foundation (NumberFormatter, DateFormatter) rəqəmlər və tarixlər üçün uyğundur
  • PhoneNumberKit — 200+ ölkə standartlarına uyğun telefon nömrələrinin formatlanması üçün həll
  • Input Mask — istənilən strukturlu məlumatların giriş maskaları üçün universal alət
  • Giriş maskaları Apple məlumatlarına görə formaların doldurulmasında səhvlərin sayını 55% azaldır
  • UITextFieldDelegate delegatı — formatlayıcının mətn sahələri ilə inteqrasiyasının əsas yolu
  • Tövsiyə — strukturlu məlumat formatı olan bütün sahələr üçün formatlayıcıdan istifadə edin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun