Formatter — шта је, форматери уноса и NSFormatter

Аутор: IT Sectr Објављено: 2026-07-08 Време читања: 8 мин

Formatter у iOS-у је механизам форматирања унетих података који аутоматски претвара неструктуирани текст у одређени формат. Системске класе NSFormatter и InputMask омогућују обраду бројева телефона, кредитних картица, датума и других структуираних података. Према Apple Foundation Framework Reference (2025), правилно форматирање уноса смањује број грешака при попуњавању образаца за 55% и убрзава унос података за 30%.

Главно

  • Formatter — системски механизам iOS-а за аутоматско форматирање унетих података у одређени образац
  • NSFormatter — апстрактна Foundation класа на којој су засновани NumberFormatter, DateFormatter и други
  • Input Mask — библиотека маскирања уноса за форматирање бројева телефона, картица, датума и кодова
  • Phone Number Kit — Apple-ов оквир за форматирање и валидацију телефонских бројева
  • Маске уноса одређују образац (нпр. +7 (___) ___-__-__) и аутоматски постављају раздвојнике

Шта је Formatter у iOS-у?

Formatter у iOS-у је компонента која претвара необрађени кориснички унос у структуирани формат према одређеном обрасцу. За разлику од једноставне валидације након слања формулара, форматер ради у реалном времену, коригујући приказ података како се уносе. Ово је кључна разлика: корисник види форматирани резултат одмах, без потребе да рочно уноси раздвојнике.

iOS пружа неколико нивоа форматирања: системске Foundation форматере (NumberFormatter, DateFormatter, ByteCountFormatter) за приказ података, PhoneNumberKit оквир за телефонске бројеве и библиотеке трећих страна InputMask за произвољне маске уноса.

Према Apple Human Interface Guidelines, форматери уноса решавају три задатка: смањују когнитивно оптерећење корисника, смањују број грешака и убрзавају попуњавање образаца.

Форматери су посебно важни за мобилне уређаје. Аутоматско постављање раздвојника смањује број дотицаја за 20–40% за типичне формате.

Типови форматера уноса

Форматери уноса у iOS-у се деле на три категорије.

Системски Foundation форматери

NumberFormatter форматира нумеричке вриједности. DateFormatter претвара датуме и време у локализоване низове.

PhoneNumberKit

PhoneNumberKit — Apple-ова библиотека за форматирање телефонских бројева.

Input Mask библиотеке

Библиотеке трећих страна InputMask пружају универзални механизам маскирања уноса: бројеве картица (0000 0000 0000 0000), датуме (ДД.ММ.ГГГГ).

ТипОквирНаменаНачин рада
БројевиNumberFormatterНовац, процентиПриказ
ДатумиDateFormatterДатум, времеПриказ
ТелефониPhoneNumberKitБројеви према стандардимаУнос + валидација
МаскеInputMaskКартице, кодовиУнос у реалном времену

Апстрактна класа NSFormatter

NSFormatter — апстрактна Foundation класа која дефинише методе string(for:) и getObjectValue(_:for:errorDescription:). Apple препоручује коришћење постојећих Foundation форматера.

Input Mask и маскирање уноса

Input Mask — образац који аутоматски поставља раздвојнике током уношења. Најпопуларнија библиотека за iOS — InputMask од RedMadRobot.

Formatiranje telefonskih brojeva

Formatiranje telefonskih brojeva — najčešći scenarij korišćenja formatatera u iOS-u. Od iOS 16 je dostupan ugrađeni mehanizam za formatiranje telefonskih brojeva.

Implementacija formatatera u Swift-u

Implementacija formatatera u Swift-u zavisi od pristupa.

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

Za NumberFormatter od iOS 15+ koristi se formatter svojstvo na UITextField.

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

Za InputMask RedMadRobot podešavanje se vrši kroz delegat.

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

Često postavljana pitanja

Koja biblioteka formatatera je bolja za iOS?

Za telefonske brojeve — PhoneNumberKit.

Da li formatater radi sa UITextView?

Da, UITextView podržava iste delegate kao UITextField.

Kako obraditi paste sa formataterom?

Paste se obrađuje kroz shouldChangeCharactersIn delegat.

Da li je potreban formatater za email?

Ne, email nema fiksni format.

Kako formatater utiče na performanse?

Moderni formatateri obrađuju unos za manje od 1 ms po znaku.

Zakljucak

  • Formatter — iOS mehanizam za automatsko formatiranje
  • Sistemski Foundation formatere su pogodni za brojeve i datume
  • PhoneNumberKit — resenje za formatiranje telefonskih brojeva
  • Input Mask — univerzalni alat za maske unosa
  • Maske unosa smanjuju broj gresaka za 55%
  • UITextFieldDelegate — glavni nacin integracije
  • Preporuka — koristite formatater za sva polja

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође