SwiftUI 3.0. Первая часть.

06 сентября 2021

SwiftUI 3.0. Параметр format для типа Text

format - это новый параметр для инициализатора Text. Он позволяет форматировать списки, даты и числа в текстовые значения.

Рассмотрим пример использования формата .list() с массивом строк:

struct ContentView: View {
    @State private var ingredients: [String] = []

    var body: some View {
        VStack {
            Text(ingredients, format: .list(type: .and))

            Button("Add Ingredient") {
                let possibles = ["Egg", "Sausage", "Bacon", "Spam"]

                if let newIngredient = possibles.randomElement() {
                    ingredients.append(newIngredient)
                }
            }
        }
    }
}

Теперь посмотрим на пример работы с числовыми значениями:

struct ContentView: View {
    @State private var rolls: [Int] = []

    var body: some View {
        VStack {
            Text(rolls, format: .list(memberStyle: .number, type: .and))

            Button("Roll Dice") {
                let result = Int.random(in: 1...6)
                rolls.append(result)
            }
        }
    }
}

Или, если вы работаете с такими измерениями, как расстояние или вес, тип формата .measurement() автоматически настроит ваше значение для отображения в соответсвии с локализацией пользователя. Например, если вы храните значения в сантиметрах внутри, но у пользователя на устройстве был региональный стандарт США, iOS автоматически отобразит значение в футах или дюймах в зависимости от размера значения.

struct ContentView: View {
    let weight = Measurement(value: 225, unit: UnitLength.centimeters)

    var body: some View {
        VStack {
            Text(weight, format: .measurement(width: .wide))
        }
    }
}

Существует даже средство форматирования для правильной обработки валют, обеспечивающее отображение двух десятичных знаков и добавление символа валюты при необходимости:

Text(72.3, format: .currency(code: "RUB"))

iOS 15 позволяет вам назначить роль для вашей кнопки, чтобы помочь SwiftUI узнать, какой стиль следует для неё применить. Например, мы можем отметить кнопку удаления, как .destructive, чтобы SwiftUI мог выделить ее красным цветом:

Button("Delete", role: .destructive) {
    print("Perform delete")
}

Если вам нужно поддерживать iOS 14 и 13, то вы можете использовать formatter, так как он все еще позволяет настраивать вид отображаемого значения внутри text, но сам по себе этот способ посложнее.
Например, мы определяем date formatter и используем его для того, чтобы быть уверенными в том, что дата отображается в читаемом виде:

struct ContentView: View {
    static let taskDateFormat: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateStyle = .long
        return formatter
    }()

    let dueDate = Date()

    var body: some View {
        Text("Task due date: \(dueDate, formatter: Self.taskDateFormat)")
    }
}

В итоге по исполнению кода вы получите выражение примерно такое: “Task due date: September 4 2021”.

 

Оригинал статьи

Содержание