当前位置:   article > 正文

SwiftUI sample_swiftui accessibilityelement

swiftui accessibilityelement

    struct UserCell: View {
        var user: User

        var body: some View {
            VStack {
                Image(user.image)
                Text(user.name)
                Button("Options", action: showOptions)
            }
            .accessibilityElement(children: .combine)
        }
    }

    struct Point: CustomStringConvertible {
        let x: Int, y: Int

        var description: String {
            return "(\(x), \(y))"
        }
    }

    let p = Point(x: 21, y: 30)
    let s = String(describing: p)
    print(s)
    // Prints "(21, 30)"

    struct Point: CustomDebugStringConvertible {
        let x: Int, y: Int

        var debugDescription: String {
            return "(\(x), \(y))"
        }
    }

    let p = Point(x: 21, y: 30)
    let s = String(reflecting: p)
    print(s)
    // Prints "(21, 30)"

    
    let numbers = [2, 3, 5, 7]
    var numbersIterator = numbers.makeIterator()

    while let num = numbersIterator.next() {
        print(num)
    }
    // Prints "2"
    // Prints "3"
    // Prints "5"
    // Prints "7"

        
    @main
    struct MyApp: App {
        var body: some Scene {
            WindowGroup {
                Text("Hello, world!")
            }
        }
    }



    @main
    struct Mail: App {
        var body: some Scene {
            WindowGroup {
                MailViewer()
            }
            Settings {
                SettingsView()
            }
        }
    }


    @main
    struct Mail: App {
        @StateObject private var model = MailModel()

        var body: some Scene {
            WindowGroup {
                MailViewer()
                    .environmentObject(model) // Passed through the environment.
            }
            Settings {
                SettingsView(model: model) // Passed as an observed object.
            }
        }
    }

    @main
    struct MyApp: App {
        var body: some Scene {
            WindowGroup {
                Text("Hello, world!")
            }
        }
    }




   enum MyEnum: Int {
       case a
       case b
       case c
   }
   struct MyView: View {
       @AppStorage("MyEnumValue") private var value = MyEnum.a
       var body: some View { ... }
   }


   enum MyEnum: String {
       case a
       case b
       case c
   }
   struct MyView: View {
       @AppStorage("MyEnumValue") private var value = MyEnum.a
       var body: some View { ... }
   }


    enum MyEnum: String {
        case a
        case b
        case c
    }
    struct MyView: View {
        @AppStorage("MyEnumValue") private var value: MyEnum?
        var body: some View { ... }
    }

    enum MyEnum: Int {
        case a
        case b
        case c
    }
    struct MyView: View {
        @AppStorage("MyEnumValue") private var value: MyEnum?
        var body: some View { ... }
    }
    

    AsyncImage(url: URL(string: "https://example.com/icon.png"))
        .frame(width: 200, height: 200)


    AsyncImage(url: URL(string: "https://example.com/icon.png")) { image in
        image.resizable()
    } placeholder: {
        ProgressView()
    }
    .frame(width: 50, height: 50)



    AsyncImage(url: URL(string: "https://example.com/icon.png")) { phase in
        if let image = phase.image {
            image // Displays the loaded image.
        } else if phase.error != nil {
            Color.red // Indicates an error.
        } else {
            Color.blue // Acts as a placeholder.
        }
    }


    AsyncImage(url: URL(string: "https://example.com/icon.png")) { image in
        image.resizable(resizingMode: .tile)
    } placeholder: {
        Color.green
    }

    
    AsyncImage(url: URL(string: "https://example.com/icon.png")) { phase in
        if let image = phase.image {
            image // Displays the loaded image.
        } else if phase.error != nil {
            Color.red // Indicates an error.
        } else {
            Color.blue // Acts as a placeholder.
        }
    }

    
    

    
    AsyncImage(url: URL(string: "https://example.com/icon.png")) { phase in
        if let image = phase.image {
            image // Displays the loaded image.
        } else if phase.error != nil {
            Color.red // Indicates an error.
        } else {
            Color.blue // Acts as a placeholder.
        }
    }


    let extraOptions = ShippingOptions(rawValue: 255)
    print(extraOptions.isStrictSuperset(of: .all))
    // Prints "true"

    


    

    struct Point: CustomStringConvertible {
        let x: Int, y: Int

        var description: String {
            return "(\(x), \(y))"
        }
    }

    let p = Point(x: 21, y: 30)
    let s = String(describing: p)
    print(s)
    // Prints "(21, 30)"

    

    struct PlayButton: View {
        @Binding var isPlaying: Bool

        var body: some View {
            Button(action: {
                self.isPlaying.toggle()
            }) {
                Image(systemName: isPlaying ? "pause.circle" : "play.circle")
            }
        }
    }


    struct PlayerView: View {
        var episode: Episode
        @State private var isPlaying: Bool = false

        var body: some View {
            VStack {
                Text(episode.title)
                Text(episode.showTitle)
                PlayButton(isPlaying: $isPlaying)
            }
        }
    }



    struct PlayButton: View {
        @Binding var isPlaying: Bool

        var body: some View {
            Button(action: {
                self.isPlaying.toggle()
            }) {
                Image(systemName: isPlaying ? "pause.circle" : "play.circle")
            }
        }
    }


    struct PlayerView: View {
        var episode: Episode
        @State private var isPlaying: Bool = false

        var body: some View {
            VStack {
                Text(episode.title)
                Text(episode.showTitle)
                PlayButton(isPlaying: $isPlaying)
            }
        }
    }
    
    let numbers = [10, 20, 30, 40, 50]
    if let index = numbers.firstIndex(of: 30) {
        print(numbers[index ..< numbers.endIndex])
    }
    // Prints "[30, 40, 50]"

    

    var c = MyFancyCollection([10, 20, 30, 40, 50])
    var i = c.startIndex
    while i != c.endIndex {
        c[i] /= 5
        i = c.index(after: i)
    }
    // c == MyFancyCollection([2, 4, 6, 8, 10])
    
    var streets = ["Adams", "Bryant", "Channing", "Douglas", "Evarts"]
    print(streets[1])
    // Prints "Bryant"

    

    Button(action: signIn) {
        Text("Sign In")
    }



    Button("Sign In", action: signIn)



    List {
        // Cells that show all the current folders.
        ForEach(folders) { folder in
            Text(folder.title)
        }

        // A cell that, when selected, adds a new folder.
        Button(action: addItem) {
            Label("Add Folder", systemImage: "folder.badge.plus")
        }
    }


    .contextMenu {
        Button("Cut", action: cut)
        Button("Copy", action: copy)
        Button("Paste", action: paste)
    }


     Button("Delete", role: .destructive, action: delete)



    HStack {
        Button("Sign In", action: signIn)
        Button("Register", action: register)
    }
    .buttonStyle(.bordered)



    

    
    struct RedBorderedButtonStyle: PrimitiveButtonStyle {
        func makeBody(configuration: Configuration) -> some View {
            Button(configuration)
                .border(Color.red)
        }
    }

    
    List {
        ForEach(items) { item in
            Text(item.title)
                .swipeActions {
                    Button(role: .destructive) { delete() } label: {
                        Label("Delete", systemImage: "trash")
                    }
                }
        }
    }
    .navigationTitle("Shopping List")

    
    struct MyButtonStyle: ButtonStyle {
        func makeBody(configuration: Configuration) -> some View {
            configuration.label
                .font(
                    configuration.role == .cancel ? .title2.bold() : .title2)
                .foregroundColor(
                    configuration.role == .destructive ? Color.red : nil)
        }
    }

You can create one of each button using this style to see the effect:

    VStack(spacing: 20) {
        Button("Cancel", role: .cancel) {}
        Button("Delete", role: .destructive) {}
        Button("Continue") {}
    }
    .buttonStyle(MyButtonStyle())

    

    Canvas { context, size in
        context.stroke(
            Path(ellipseIn: CGRect(origin: .zero, size: size)),
            with: .color(.green),
            lineWidth: 4)
    }
    .frame(width: 300, height: 200)
    .border(Color.blue)



    struct ScatterPlotView<Mark: View>: View {
        let rects: [CGRect]
        let mark: Mark

        enum SymbolID: Int {
            case mark
        }

        var body: some View {
            Canvas { context, size in
                if let mark = context.resolveSymbol(id: SymbolID.mark) {
                    for rect in rects {
                        context.draw(mark, in: rect)
                    }
                }
            } symbols: {
                mark.tag(SymbolID.mark)
            }
            .frame(width: 300, height: 200)
            .border(Color.blue)
        }
    }

    

    ScatterPlotView(rects: rects, mark: Image(systemName: "circle"))



    Canvas { context, size in
        context.stroke(
            Path(ellipseIn: CGRect(origin: .zero, size: size)),
            with: .color(.green),
            lineWidth: 4)
    }
    .frame(width: 300, height: 200)
    .border(Color.blue)

    
    
* Load a color from an Asset Catalog:
    ```
    let aqua = Color("aqua") // Looks in your app's main bundle by default.
    ```
* Specify component values, like red, green, and blue; hue,
  saturation, and brightness; or white level:
    ```
    let skyBlue = Color(red: 0.4627, green: 0.8392, blue: 1.0)
    let lemonYellow = Color(hue: 0.1639, saturation: 1, brightness: 1)
    let steelGray = Color(white: 0.4745)
    ```
* Create a color instance from another color, like a
  <doc://com.apple.documentation/documentation/UIKit/UIColor> or an
  <doc://com.apple.documentation/documentation/AppKit/NSColor>:
    ```
    #if os(iOS)
    let linkColor = Color(uiColor: .link)
    #elseif os(macOS)
    let linkColor = Color(nsColor: .linkColor)
    #endif
    ```
* Use one of a palette of predefined colors, like ``ShapeStyle/black``,
  ``ShapeStyle/green``, and ``ShapeStyle/purple``.


    Image(systemName: "leaf.fill")
        .foregroundStyle(Color.green)



    ZStack {
        skyBlue
        Image(systemName: "sun.max.fill")
            .foregroundStyle(lemonYellow)
    }
    .frame(width: 200, height: 100)


    Text("Accent Color")
        .foregroundStyle(Color.accentColor)

    
    struct Hello: View {
        var body: some View {
            ZStack {
                Color("background")
                Text("Hello, world!")
                    .foregroundStyle(Color("foreground"))
            }
            .frame(width: 200, height: 100)
        }
    }

    
    struct Box: View {
        var body: some View {
            Color(UIColor.link)
                .frame(width: 200, height: 100)
        }
    }

    
    struct Box: View {
        var body: some View {
            Color(uiColor: .link)
                .frame(width: 200, height: 100)
        }
    }

    
    struct FormattingControls: View {
        @State private var bgColor =
            Color(.sRGB, red: 0.98, green: 0.9, blue: 0.2)

        var body: some View {
            VStack {
                ColorPicker("Alignment Guides", selection: $bgColor)
            }
        }
    }



    final class Settings: ObservableObject {
        @Published var alignmentGuideColor =
            Color(.sRGB, red: 0.98, green: 0.9, blue: 0.2)
    }

    struct FormattingControls: View {
        @State private var settings = Settings()

        var body: some View {
            VStack {
                // Other formatting controls.
                ColorPicker("Alignment Guides",
                    selection: $settings.alignmentGuideColor
                )
            }
        }
    }

    
    func showColorPicker(_ title: String, color: Binding<Color>) {
        ColorPicker(title, selection: color)
    }

    

    

    let selectedSize = PaperSize.Letter
    print(selectedSize.rawValue)
    // Prints "Letter"

    print(selectedSize == PaperSize(rawValue: selectedSize.rawValue)!)
    // Prints "true"
    

    func selectHearts() {
        // Act on hearts selection.
    }
    func selectClubs() { ... }
    func selectSpades() { ... }
    func selectDiamonds() { ... }

    let menuItems = ContextMenu {
        Button("♥️ - Hearts", action: selectHearts)
        Button("♣️ - Clubs", action: selectClubs)
        Button("♠️ - Spades", action: selectSpades)
        Button("♦️ - Diamonds", action: selectDiamonds)
    }

    struct ContextMenuMenuItems: View {
        private var shouldShowMenu = true
        var body: some View {
            VStack {
                Text("Favorite Card Suit")
                    .padding()
                    .contextMenu(shouldShowMenu ? menuItems : nil)
            }
        }
    }


    struct RedBorderControlGroupStyle: ControlGroupStyle {
        func makeBody(configuration: Configuration) -> some View {
            ControlGroup(configuration)
                .border(Color.red)
        }
    }

    
    @State private var date = Date()

    var body: some View {
        DatePicker(
            "Start Date",
            selection: $date,
            displayedComponents: [.date]
        )
    }


    @State private var date = Date()
    let dateRange: ClosedRange<Date> = {
        let calendar = Calendar.current
        let startComponents = DateComponents(year: 2021, month: 1, day: 1)
        let endComponents = DateComponents(year: 2021, month: 12, day: 31, hour: 23, minute: 59, second: 59)
        return calendar.date(from:startComponents)!
            ...
            calendar.date(from:endComponents)!
    }()

    var body: some View {
        DatePicker(
            "Start Date",
             selection: $date,
             in: dateRange,
             displayedComponents: [.date, .hourAndMinute]
        )
    }


    @State private var date = Date()

    var body: some View {
        DatePicker(
            "Start Date",
            selection: $date,
            displayedComponents: [.date]
        )
        .datePickerStyle(.graphical)
    }


    

    let selectedSize = PaperSize.Letter
    print(selectedSize.rawValue)
    // Prints "Letter"

    print(selectedSize == PaperSize(rawValue: selectedSize.rawValue)!)
    // Prints "true"
    
    struct ToggleStates {
        var oneIsOn: Bool = false
        var twoIsOn: Bool = true
    }
    @State private var toggleStates = ToggleStates()
    @State private var topExpanded: Bool = true

    var body: some View {
        DisclosureGroup("Items", isExpanded: $topExpanded) {
            Toggle("Toggle 1", isOn: $toggleStates.oneIsOn)
            Toggle("Toggle 2", isOn: $toggleStates.twoIsOn)
            DisclosureGroup("Sub-items") {
                Text("Sub-item 1")
            }
        }
    }

    struct SheetView: View {
        @Environment(\.dismiss) var dismiss

        var body: some View {
            NavigationView {
                SheetContents()
                    .toolbar {
                        Button("Done") {
                            dismiss()
                        }
                    }
            }
        }
    }


    @main
    struct MyApp: App {
        var body: some Scene {
            DocumentGroup(newDocument: TextFile()) { file in
                ContentView(document: file.$document)
            }
        }
    }


    @main
    struct MyApp: App {
        var body: some Scene {
            DocumentGroup(viewing: MyImageFormatDocument.self) {
                MyImageFormatViewer(image: $0.document)
            }
        }
    }


    @main
    struct MyApp: App {
        var body: some Scene {
            DocumentGroup(newDocument: TextFile()) { group in
                ContentView(document: group.$document)
            }
            DocumentGroup(viewing: MyImageFormatDocument.self) { group in
                MyImageFormatViewer(image: group.document)
            }
        }
    }


    @main
    struct MyApp: App {
        var body: some Scene {
            DocumentGroup(newDocument: TextFile()) { file in
                ContentView(document: file.$document)
            }
        }
    }

    
    @main
    struct MyApp: App {
        var body: some Scene {
            DocumentGroup(viewing: MyImageFormatDocument.self) { file in
                MyImageFormatViewer(image: file.document)
            }
        }
    }

    

    struct DragGestureView: View {
        @State var isDragging = false

        var drag: some Gesture {
            DragGesture()
                .onChanged { _ in self.isDragging = true }
                .onEnded { _ in self.isDragging = false }
        }

        var body: some View {
            Circle()
                .fill(self.isDragging ? Color.red : Color.blue)
                .frame(width: 100, height: 100, alignment: .center)
                .gesture(drag)
        }
    }

    

    print(PaperSize(rawValue: "Legal"))
    // Prints "Optional("PaperSize.Legal")"

    print(PaperSize(rawValue: "Tabloid"))
    // Prints "nil"

    
    

    let selectedSize = PaperSize.Letter
    print(selectedSize.rawValue)
    // Prints "Letter"

    print(selectedSize == PaperSize(rawValue: selectedSize.rawValue)!)
    // Prints "true"
    
    @State private var fruits = [
        "Apple",
        "Banana",
        "Papaya",
        "Mango"
    ]

    var body: some View {
        NavigationView{
            List {
                ForEach(
                    fruits,
                    id: \.self
                ) { fruit in
                    Text(fruit)
                }
                .onDelete { self.deleteFruit(at :$0) }
                .onMove { self.moveFruit(from: $0, to: $1) }
            }
            .navigationTitle("Fruits")
            .toolbar { EditButton() }
        }
    }



    EllipticalGradient(
        gradient: .init(colors: [.blue, .green]),
        center: .topLeading,
        startRadiusFraction: 0,
        endRadiusFraction: 1)

    

    EllipticalGradient(
        colors: [.blue, .green],
        center: .topLeading,
        startRadiusFraction: 0,
        endRadiusFraction: 1)

    
    EllipticalGradient(
        stops: [
            .init(color: .blue, location: 0.0),
            .init(color: .green, location: 0.9),
            .init(color: .green, location: 1.0),
        ],
        center: .topLeading,
        startRadiusFraction: 0,
        endRadiusFraction: 1)

    

    struct EmphasizedLayout: ViewModifier {
        func body(content: Content) -> some View {
            content
                .background(Color.yellow)
                .border(Color.red)
        }
    }

    struct ContentView: View {
        var body: some View {
            Text("Hello, World!")
                .modifier(modifier)
        }

        var modifier: some ViewModifier {
            #if DEBUG
                return EmphasizedLayout()
            #else
                return EmptyModifier()
            #endif
        }
    }


    let progressView = ProgressView()
    print("\(type(of:progressView))")
    // Prints: ProgressView<EmptyView, EmptyView>


    @Environment(\.colorScheme) var colorScheme: ColorScheme


    if colorScheme == .dark { // Checks the wrapped value.
        DarkContent()
    } else {
        LightContent()
    }


    struct MyView: View {
        @Environment(\.colorScheme) var colorScheme: ColorScheme

        // ...
    }

    
    @Environment(\.colorScheme) var colorScheme: ColorScheme

    var body: some View {
        if colorScheme == .dark {
            DarkContent()
        } else {
            LightContent()
        }
    }

    
    private struct MyEnvironmentKey: EnvironmentKey {
        static let defaultValue: String = "Default value"
    }



    extension EnvironmentValues {
        var myCustomValue: String {
            get { self[MyEnvironmentKey.self] }
            set { self[MyEnvironmentKey.self] = newValue }
        }
    }


    MyView()
        .environment(\.myCustomValue, "Another string")


    extension View {
        func myCustomValue(_ myCustomValue: String) -> some View {
            environment(\.myCustomValue, myCustomValue)
        }
    }



    MyView()
        .myCustomValue("Another string")



    struct MyView: View {
        @Environment(\.myCustomValue) var customValue: String

        var body: some View {
            Text(customValue) // Displays "Another value".
        }
    }


    @Environment(\.locale) var locale: Locale



    MyView()
        .environment(\.lineLimit, 2)


    MyView()
        .lineLimit(2)



    MyView()
        .popover(isPresented: $isPopped) {
            PopoverContent()
                .preferredColorScheme(.dark)
        }


    private struct MyEnvironmentKey: EnvironmentKey {
        static let defaultValue: String = "Default value"
    }

    extension EnvironmentValues {
        var myCustomValue: String {
            get { self[MyEnvironmentKey.self] }
            set { self[MyEnvironmentKey.self] = newValue }
        }
    }

    extension View {
        func myCustomValue(_ myCustomValue: String) -> some View {
            environment(\.myCustomValue, myCustomValue)
        }
    }


    private struct MyEnvironmentKey: EnvironmentKey {
        static let defaultValue: String = "Default value"
    }

    extension EnvironmentValues {
        var myCustomValue: String {
            get { self[MyEnvironmentKey.self] }
            set { self[MyEnvironmentKey.self] = newValue }
        }
    }

    

    extension View {
        func myCustomValue(_ myCustomValue: String) -> some View {
            environment(\.myCustomValue, myCustomValue)
        }
    }

    
    HStack {
        Image(systemName: "heart")
        Image(systemName: "heart")
            .environment(\.symbolVariants, .none)
    }
    .symbolVariant(.fill)

    
    struct ContentView: View {
        @State var text = ""

        var body: some View {
            SearchReadingView()
                .searchable(text: $text)
        }
    }

    struct SearchReadingView: View {
        @Environment(\.isSearching) var isSearching

        var body: some View {
            if isSearching {
               Text("Searching!")
            } else {
                Text("Not searching.")
        }
    }

    

    NavigationView {
        MyList()
           .searchable(text: $text)
    }

    struct MyList: View {
        @State private var isPresented = false
        @Environment(\.isSearching) private var isSearching

        var body: some View {
            Text("Main List")
                .frame(maxWidth: .infinity, maxHeight: .infinity)
                .overlay {
                    if isSearching {
                        Button {
                            isPresented = true
                        } label: {
                            Text("Present")
                                .frame(
                                    maxWidth: .infinity,
                                    maxHeight: .infinity
                                )
                                .background()
                        }
                        .sheet(isPresented: $isPresented) {
                            NavigationView {
                                DetailView()
                            }
                        }
                    }
                }
        }
    }

    struct DetailView: View {
        @Environment(\.dismiss) private var dismiss
        @Environment(\.dismissSearch) private var dismissSearch

        var body: some View {
            Text("Detail Content")
                .toolbar {
                    Button("Add") {
                        dismiss()
                        dismissSearch()
                    }
                }
        }
    }
    

    Text("Visit [Example Co](https://www.example.com) for details.")
        .environment(\.openURL, OpenURLAction { url in
            handleURL(url)
            return .handled
        })

    

    private struct MyButtonStyle: ButtonStyle {
        @Environment(\.keyboardShortcut)
        private var shortcut: KeyboardShortcut?

        func makeBody(configuration: Configuration) -> some View {
            let labelFont = Font.body
                .weight(shortcut == .defaultAction ? .bold : .regular)
            configuration.label
                .font(labelFont)
        }
    }

    
    HStack {
        Text("This is a very long label:")
            .lineLimit(1)
            .minimumScaleFactor(0.5)
        TextField("My Long Text Field", text: $myTextField)
            .frame(width: 250, height: 50, alignment: .center)
    }

    
    let numbers = [2, 3, 5, 7]
    var numbersIterator = numbers.makeIterator()

    while let num = numbersIterator.next() {
        print(num)
    }
    // Prints "2"
    // Prints "3"
    // Prints "5"
    // Prints "7"

        

    @FetchRequest(sortDescriptors: [SortDescriptor(\.time, order: .reverse)])
    private var quakes: FetchedResults<Quake>


    @FetchRequest(fetchRequest: request)
    private var quakes: FetchedResults<Quake>


    ContentView()
        .environment(
            \.managedObjectContext,
            QuakesProvider.shared.container.viewContext)


    @FetchRequest(fetchRequest: request)
    private var quakes: FetchedResults<Quake>

    
    Text("Found \(quakes.count) earthquakes")

    
    var fetchRequest = FetchRequest<Quake>(fetchRequest: request)
    var quakes: FetchedResults<Quake> { fetchRequest.wrappedValue }

    
    @FetchRequest(sortDescriptors: [SortDescriptor(\.time, order: .reverse)])
    private var quakes: FetchedResults<Quake>

    

    Table(quakes, sortOrder: $quakes.sortDescriptors) {
        TableColumn("Place", value: \.place)
        TableColumn("Time", value: \.time) { quake in
            Text(quake.time, style: .time)
        }
    }

    
    @State private var query = ""

    
    .onChange(of: query) { value in
        quakes.nsPredicate = query.isEmpty
            ? nil
            : NSPredicate(format: "place CONTAINS %@", value)
    }

    
    TextField("Filter", text: $query)

    
    @FetchRequest(sortDescriptors: [SortDescriptor(\.time, order: .reverse)])
    private var quakes: FetchedResults<Quake>

    
    Table(quakes, sortOrder: $quakes.sortDescriptors) {
        TableColumn("Place", value: \.place)
        TableColumn("Time", value: \.time) { quake in
            Text(quake.time, style: .time)
        }
    }

    

    extension Quake {
        var request: NSFetchRequest<Quake> {
            let request = NSFetchRequest<Quake>(entityName: "Quake")
            request.sortDescriptors = [
                NSSortDescriptor(
                    keyPath: \Quake.time,
                    ascending: true)]
            request.fetchLimit = 1000
            return request
        }
    }

    

    @FetchRequest(fetchRequest: Quake.request)
    private var quakes: FetchedResults<Quake>

    

    @FetchRequest(sortDescriptors: [SortDescriptor(\.time, order: .reverse)])
    private var quakes: FetchedResults<Quake>



    List(quakes) { quake in
        NavigationLink(destination: QuakeDetail(quake: quake)) {
            QuakeRow(quake: quake)
        }
    }


    ContentView()
        .environment(
            \.managedObjectContext,
            QuakesProvider.shared.container.viewContext)


    struct LoginForm {
        enum Field: Hashable {
            case username
            case password
        }

        @State private var username = ""
        @State private var password = ""
        @FocusState private var focusedField: Field?

        var body: some View {
            Form {
                TextField("Username", text: $username)
                    .focused($focusedField, equals: .username)

                SecureField("Password", text: $password)
                    .focused($focusedField, equals: .password)

                Button("Sign In") {
                    if username.isEmpty {
                        focusedField = .username
                    } else if password.isEmpty {
                        focusedField = .password
                    } else {
                        handleLogin(username, password)
                    }
                }
            }
        }
    }


    struct ContentView: View {
        enum Field: Hashable {
            case name
            case fullName
        }
        @FocusState private var focusedField: Field?

        var body: some View {
            TextField("Full Name", ...)
                .focused($focusedField, equals: .name)
                .focused($focusedField, equals: .fullName)
        }
    }


    struct ContentView: View {
        enum Field: Hashable {
            case name
            case fullName
        }
        @FocusState private var focusedField: Field?

        var body: some View {
            TextField("Name", ...)
                .focused($focusedField, equals: .name)
            TextField("Full Name", ...)
                .focused($focusedField, equals: .name) // incorrect re-use of .name
        }
    }



    struct Sidebar: View {
        @State private var filterText = ""
        @FocusState private var isFiltering: Bool

        var body: some View {
            VStack {
                Button("Filter Sidebar Contents") {
                    isFiltering = true
                }

                TextField("Filter", text: $filterText)
                    .focused($isFiltering)
            }
        }
    }
    
    // Use native Core Text API to create desired ctFont.
    let ctFont = CTFontCreateUIFontForLanguage(.system, 12, nil)!

    // Create SwiftUI Text with the CTFont instance.
    let text = Text("Hello").font(Font(ctFont))
    
    private struct NamedFont: Identifiable {
        let name: String
        let font: Font
        var id: String { name }
    }

    private let namedFonts: [NamedFont] = [
        NamedFont(name: "Large Title", font: .largeTitle),
        NamedFont(name: "Title", font: .title),
        NamedFont(name: "Headline", font: .headline),
        NamedFont(name: "Body", font: .body),
        NamedFont(name: "Caption", font: .caption)
    ]

    var body: some View {
        ForEach(namedFonts) { namedFont in
            Text(namedFont.name)
                .font(namedFont.font)
        }
    }



    var body: some View {
        NavigationView {
            Form {
                Section(header: Text("Notifications")) {
                    Picker("Notify Me About", selection: $notifyMeAbout) {
                        Text("Direct Messages").tag(NotifyMeAboutType.directMessages)
                        Text("Mentions").tag(NotifyMeAboutType.mentions)
                        Text("Anything").tag(NotifyMeAboutType.anything)
                    }
                    Toggle("Play notification sounds", isOn: $playNotificationSounds)
                    Toggle("Send read receipts", isOn: $sendReadReceipts)
                }
                Section(header: Text("User Profiles")) {
                    Picker("Profile Image Size", selection: $profileImageSize) {
                        Text("Large").tag(ProfileImageSize.large)
                        Text("Medium").tag(ProfileImageSize.medium)
                        Text("Small").tag(ProfileImageSize.small)
                    }
                    Button("Clear Image Cache") {}
                }
            }
        }
    }


    var body: some View {
        Spacer()
        HStack {
            Spacer()
            Form {
                Picker("Notify Me About:", selection: $notifyMeAbout) {
                    Text("Direct Messages").tag(NotifyMeAboutType.directMessages)
                    Text("Mentions").tag(NotifyMeAboutType.mentions)
                    Text("Anything").tag(NotifyMeAboutType.anything)
                }
                Toggle("Play notification sounds", isOn: $playNotificationSounds)
                Toggle("Send read receipts", isOn: $sendReadReceipts)

                Picker("Profile Image Size:", selection: $profileImageSize) {
                    Text("Large").tag(ProfileImageSize.large)
                    Text("Medium").tag(ProfileImageSize.medium)
                    Text("Small").tag(ProfileImageSize.small)
                }
                .pickerStyle(.inline)

                Button("Clear Image Cache") {}
            }
            Spacer()
        }
        Spacer()
    }


    

    let selectedSize = PaperSize.Letter
    print(selectedSize.rawValue)
    // Prints "Letter"

    print(selectedSize == PaperSize(rawValue: selectedSize.rawValue)!)
    // Prints "true"
    
    struct SimpleLongPressGestureView: View {
        @GestureState var isDetectingLongPress = false

        var longPress: some Gesture {
            LongPressGesture(minimumDuration: 3)
                .updating($isDetectingLongPress) { currentState, gestureState, transaction in
                    gestureState = currentState
                }
        }

        var body: some View {
            Circle()
                .fill(self.isDetectingLongPress ? Color.red : Color.green)
                .frame(width: 100, height: 100, alignment: .center)
                .gesture(longPress)
        }
    }


    Canvas { context, size in
        context.fill(
            Path(ellipseIn: CGRect(origin: .zero, size: size)),
            with: .color(.green))
    }
    .frame(width: 300, height: 200)


    let halfSize = size.applying(CGAffineTransform(scaleX: 0.5, y: 0.5))
    context.clip(to: Path(CGRect(origin: .zero, size: halfSize)))
    context.fill(
        Path(ellipseIn: CGRect(origin: .zero, size: size)),
        with: .color(.green))


    // Create a copy of the context to draw a clipped ellipse.
    var maskedContext = context
    let halfSize = size.applying(CGAffineTransform(scaleX: 0.5, y: 0.5))
    maskedContext.clip(to: Path(CGRect(origin: .zero, size: halfSize)))
    maskedContext.fill(
        Path(ellipseIn: CGRect(origin: .zero, size: size)),
        with: .color(.green))

    // Go back to the original context to draw the rectangle.
    let origin = CGPoint(x: size.width / 4, y: size.height / 4)
    context.fill(
        Path(CGRect(origin: origin, size: halfSize)),
        with: .color(.blue))


    enum PaperSize: String {
        case A4, A5, Letter, Legal
    }

    print(PaperSize(rawValue: "Legal"))
    // Prints "Optional("PaperSize.Legal")"

    print(PaperSize(rawValue: "Tabloid"))
    // Prints "nil"

        
        
        
        
    Group {
        Text("SwiftUI")
        Text("Combine")
        Text("Swift System")
    }
    .font(.headline)


    Group {
        if isLoggedIn {
            WelcomeView()
        } else {
            LoginView()
        }
    }
    .navigationBarTitle("Start")


    var body: some View {
        VStack {
            Group {
                Text("1")
                Text("2")
                Text("3")
                Text("4")
                Text("5")
                Text("6")
                Text("7")
                Text("8")
                Text("9")
                Text("10")
            }
            Text("11")
        }
    }


    var body: some View {
        GroupBox(label:
            Label("End-User Agreement", systemImage: "building.columns")
        ) {
            ScrollView(.vertical, showsIndicators: true) {
                Text(agreementText)
                    .font(.footnote)
            }
            .frame(height: 100)
            Toggle(isOn: $userAgreed) {
                Text("I agree to the above terms")
            }
        }
    }


    struct PinkBorderGroupBoxStyle: GroupBoxStyle {
        func makeBody(configuration: Configuration) -> some View {
            GroupBox(configuration)
                .border(Color.pink)
        }
    }
    
    var body: some View {
        HStack(
            alignment: .top,
            spacing: 10
        ) {
            ForEach(
                1...5,
                id: \.self
            ) {
                Text("Item \($0)")
            }
        }
    }

        
        
    

    print(PaperSize(rawValue: "Legal"))
    // Prints "Optional("PaperSize.Legal")"

    print(PaperSize(rawValue: "Tabloid"))
    // Prints "nil"

    
    

    let selectedSize = PaperSize.Letter
    print(selectedSize.rawValue)
    // Prints "Letter"

    print(selectedSize == PaperSize(rawValue: selectedSize.rawValue)!)
    // Prints "true"
    
    Image("Landscape_4")
        .resizable()
        .aspectRatio(contentMode: .fit)
    Text("Water wheel")


    Image("dot_green")
        .renderingMode(.original)
    Image("dot_green")
        .renderingMode(.template)

    
```swift
HStack {
   Image(systemName: "person.crop.circle.badge.plus")
   Image(systemName: "person.crop.circle.badge.plus")
       .renderingMode(.original)
       .foregroundColor(.blue)
   Image(systemName: "person.crop.circle.badge.plus")
       .renderingMode(.template)
       .foregroundColor(.blue)
}
.font(.largeTitle)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • 428
  • 429
  • 430
  • 431
  • 432
  • 433
  • 434
  • 435
  • 436
  • 437
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • 454
  • 455
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • 486
  • 487
  • 488
  • 489
  • 490
  • 491
  • 492
  • 493
  • 494
  • 495
  • 496
  • 497
  • 498
  • 499
  • 500
  • 501
  • 502
  • 503
  • 504
  • 505
  • 506
  • 507
  • 508
  • 509
  • 510
  • 511
  • 512
  • 513
  • 514
  • 515
  • 516
  • 517
  • 518
  • 519
  • 520
  • 521
  • 522
  • 523
  • 524
  • 525
  • 526
  • 527
  • 528
  • 529
  • 530
  • 531
  • 532
  • 533
  • 534
  • 535
  • 536
  • 537
  • 538
  • 539
  • 540
  • 541
  • 542
  • 543
  • 544
  • 545
  • 546
  • 547
  • 548
  • 549
  • 550
  • 551
  • 552
  • 553
  • 554
  • 555
  • 556
  • 557
  • 558
  • 559
  • 560
  • 561
  • 562
  • 563
  • 564
  • 565
  • 566
  • 567
  • 568
  • 569
  • 570
  • 571
  • 572
  • 573
  • 574
  • 575
  • 576
  • 577
  • 578
  • 579
  • 580
  • 581
  • 582
  • 583
  • 584
  • 585
  • 586
  • 587
  • 588
  • 589
  • 590
  • 591
  • 592
  • 593
  • 594
  • 595
  • 596
  • 597
  • 598
  • 599
  • 600
  • 601
  • 602
  • 603
  • 604
  • 605
  • 606
  • 607
  • 608
  • 609
  • 610
  • 611
  • 612
  • 613
  • 614
  • 615
  • 616
  • 617
  • 618
  • 619
  • 620
  • 621
  • 622
  • 623
  • 624
  • 625
  • 626
  • 627
  • 628
  • 629
  • 630
  • 631
  • 632
  • 633
  • 634
  • 635
  • 636
  • 637
  • 638
  • 639
  • 640
  • 641
  • 642
  • 643
  • 644
  • 645
  • 646
  • 647
  • 648
  • 649
  • 650
  • 651
  • 652
  • 653
  • 654
  • 655
  • 656
  • 657
  • 658
  • 659
  • 660
  • 661
  • 662
  • 663
  • 664
  • 665
  • 666
  • 667
  • 668
  • 669
  • 670
  • 671
  • 672
  • 673
  • 674
  • 675
  • 676
  • 677
  • 678
  • 679
  • 680
  • 681
  • 682
  • 683
  • 684
  • 685
  • 686
  • 687
  • 688
  • 689
  • 690
  • 691
  • 692
  • 693
  • 694
  • 695
  • 696
  • 697
  • 698
  • 699
  • 700
  • 701
  • 702
  • 703
  • 704
  • 705
  • 706
  • 707
  • 708
  • 709
  • 710
  • 711
  • 712
  • 713
  • 714
  • 715
  • 716
  • 717
  • 718
  • 719
  • 720
  • 721
  • 722
  • 723
  • 724
  • 725
  • 726
  • 727
  • 728
  • 729
  • 730
  • 731
  • 732
  • 733
  • 734
  • 735
  • 736
  • 737
  • 738
  • 739
  • 740
  • 741
  • 742
  • 743
  • 744
  • 745
  • 746
  • 747
  • 748
  • 749
  • 750
  • 751
  • 752
  • 753
  • 754
  • 755
  • 756
  • 757
  • 758
  • 759
  • 760
  • 761
  • 762
  • 763
  • 764
  • 765
  • 766
  • 767
  • 768
  • 769
  • 770
  • 771
  • 772
  • 773
  • 774
  • 775
  • 776
  • 777
  • 778
  • 779
  • 780
  • 781
  • 782
  • 783
  • 784
  • 785
  • 786
  • 787
  • 788
  • 789
  • 790
  • 791
  • 792
  • 793
  • 794
  • 795
  • 796
  • 797
  • 798
  • 799
  • 800
  • 801
  • 802
  • 803
  • 804
  • 805
  • 806
  • 807
  • 808
  • 809
  • 810
  • 811
  • 812
  • 813
  • 814
  • 815
  • 816
  • 817
  • 818
  • 819
  • 820
  • 821
  • 822
  • 823
  • 824
  • 825
  • 826
  • 827
  • 828
  • 829
  • 830
  • 831
  • 832
  • 833
  • 834
  • 835
  • 836
  • 837
  • 838
  • 839
  • 840
  • 841
  • 842
  • 843
  • 844
  • 845
  • 846
  • 847
  • 848
  • 849
  • 850
  • 851
  • 852
  • 853
  • 854
  • 855
  • 856
  • 857
  • 858
  • 859
  • 860
  • 861
  • 862
  • 863
  • 864
  • 865
  • 866
  • 867
  • 868
  • 869
  • 870
  • 871
  • 872
  • 873
  • 874
  • 875
  • 876
  • 877
  • 878
  • 879
  • 880
  • 881
  • 882
  • 883
  • 884
  • 885
  • 886
  • 887
  • 888
  • 889
  • 890
  • 891
  • 892
  • 893
  • 894
  • 895
  • 896
  • 897
  • 898
  • 899
  • 900
  • 901
  • 902
  • 903
  • 904
  • 905
  • 906
  • 907
  • 908
  • 909
  • 910
  • 911
  • 912
  • 913
  • 914
  • 915
  • 916
  • 917
  • 918
  • 919
  • 920
  • 921
  • 922
  • 923
  • 924
  • 925
  • 926
  • 927
  • 928
  • 929
  • 930
  • 931
  • 932
  • 933
  • 934
  • 935
  • 936
  • 937
  • 938
  • 939
  • 940
  • 941
  • 942
  • 943
  • 944
  • 945
  • 946
  • 947
  • 948
  • 949
  • 950
  • 951
  • 952
  • 953
  • 954
  • 955
  • 956
  • 957
  • 958
  • 959
  • 960
  • 961
  • 962
  • 963
  • 964
  • 965
  • 966
  • 967
  • 968
  • 969
  • 970
  • 971
  • 972
  • 973
  • 974
  • 975
  • 976
  • 977
  • 978
  • 979
  • 980
  • 981
  • 982
  • 983
  • 984
  • 985
  • 986
  • 987
  • 988
  • 989
  • 990
  • 991
  • 992
  • 993
  • 994
  • 995
  • 996
  • 997
  • 998
  • 999
  • 1000
  • 1001
  • 1002
  • 1003
  • 1004
  • 1005
  • 1006
  • 1007
  • 1008
  • 1009
  • 1010
  • 1011
  • 1012
  • 1013
  • 1014
  • 1015
  • 1016
  • 1017
  • 1018
  • 1019
  • 1020
  • 1021
  • 1022
  • 1023
  • 1024
  • 1025
  • 1026
  • 1027
  • 1028
  • 1029
  • 1030
  • 1031
  • 1032
  • 1033
  • 1034
  • 1035
  • 1036
  • 1037
  • 1038
  • 1039
  • 1040
  • 1041
  • 1042
  • 1043
  • 1044
  • 1045
  • 1046
  • 1047
  • 1048
  • 1049
  • 1050
  • 1051
  • 1052
  • 1053
  • 1054
  • 1055
  • 1056
  • 1057
  • 1058
  • 1059
  • 1060
  • 1061
  • 1062
  • 1063
  • 1064
  • 1065
  • 1066
  • 1067
  • 1068
  • 1069
  • 1070
  • 1071
  • 1072
  • 1073
  • 1074
  • 1075
  • 1076
  • 1077
  • 1078
  • 1079
  • 1080
  • 1081
  • 1082
  • 1083
  • 1084
  • 1085
  • 1086
  • 1087
  • 1088
  • 1089
  • 1090
  • 1091
  • 1092
  • 1093
  • 1094
  • 1095
  • 1096
  • 1097
  • 1098
  • 1099
  • 1100
  • 1101
  • 1102
  • 1103
  • 1104
  • 1105
  • 1106
  • 1107
  • 1108
  • 1109
  • 1110
  • 1111
  • 1112
  • 1113
  • 1114
  • 1115
  • 1116
  • 1117
  • 1118
  • 1119
  • 1120
  • 1121
  • 1122
  • 1123
  • 1124
  • 1125
  • 1126
  • 1127
  • 1128
  • 1129
  • 1130
  • 1131
  • 1132
  • 1133
  • 1134
  • 1135
  • 1136
  • 1137
  • 1138
  • 1139
  • 1140
  • 1141
  • 1142
  • 1143
  • 1144
  • 1145
  • 1146
  • 1147
  • 1148
  • 1149
  • 1150
  • 1151
  • 1152
  • 1153
  • 1154
  • 1155
  • 1156
  • 1157
  • 1158
  • 1159
  • 1160
  • 1161
  • 1162
  • 1163
  • 1164
  • 1165
  • 1166
  • 1167
  • 1168
  • 1169
  • 1170
  • 1171
  • 1172
  • 1173
  • 1174
  • 1175
  • 1176
  • 1177
  • 1178
  • 1179
  • 1180
  • 1181
  • 1182
  • 1183
  • 1184
  • 1185
  • 1186
  • 1187
  • 1188
  • 1189
  • 1190
  • 1191
  • 1192
  • 1193
  • 1194
  • 1195
  • 1196
  • 1197
  • 1198
  • 1199
  • 1200
  • 1201
  • 1202
  • 1203
  • 1204
  • 1205
  • 1206
  • 1207
  • 1208
  • 1209
  • 1210
  • 1211
  • 1212
  • 1213
  • 1214
  • 1215
  • 1216
  • 1217
  • 1218
  • 1219
  • 1220
  • 1221
  • 1222
  • 1223
  • 1224
  • 1225
  • 1226
  • 1227
  • 1228
  • 1229
  • 1230
  • 1231
  • 1232
  • 1233
  • 1234
  • 1235
  • 1236
  • 1237
  • 1238
  • 1239
  • 1240
  • 1241
  • 1242
  • 1243
  • 1244
  • 1245
  • 1246
  • 1247
  • 1248
  • 1249
  • 1250
  • 1251
  • 1252
  • 1253
  • 1254
  • 1255
  • 1256
  • 1257
  • 1258
  • 1259
  • 1260
  • 1261
  • 1262
  • 1263
  • 1264
  • 1265
  • 1266
  • 1267
  • 1268
  • 1269
  • 1270
  • 1271
  • 1272
  • 1273
  • 1274
  • 1275
  • 1276
  • 1277
  • 1278
  • 1279
  • 1280
  • 1281
  • 1282
  • 1283
  • 1284
  • 1285
  • 1286
  • 1287
  • 1288
  • 1289
  • 1290
  • 1291
  • 1292
  • 1293
  • 1294
  • 1295
  • 1296
  • 1297
  • 1298
  • 1299
  • 1300
  • 1301
  • 1302
  • 1303
  • 1304
  • 1305
  • 1306
  • 1307
  • 1308
  • 1309
  • 1310
  • 1311
  • 1312
  • 1313
  • 1314
  • 1315
  • 1316
  • 1317
  • 1318
  • 1319
  • 1320
  • 1321
  • 1322
  • 1323
  • 1324
  • 1325
  • 1326
  • 1327
  • 1328
  • 1329
  • 1330
  • 1331
  • 1332
  • 1333
  • 1334
  • 1335
  • 1336
  • 1337
  • 1338
  • 1339
  • 1340
  • 1341
  • 1342
  • 1343
  • 1344
  • 1345
  • 1346
  • 1347
  • 1348
  • 1349
  • 1350
  • 1351
  • 1352
  • 1353
  • 1354
  • 1355
  • 1356
  • 1357
  • 1358
  • 1359
  • 1360
  • 1361
  • 1362
  • 1363
  • 1364
  • 1365
  • 1366
  • 1367
  • 1368
  • 1369
  • 1370
  • 1371
  • 1372
  • 1373
  • 1374
  • 1375
  • 1376
  • 1377
  • 1378
  • 1379
  • 1380
  • 1381
  • 1382
  • 1383
  • 1384
  • 1385
  • 1386
  • 1387
  • 1388
  • 1389
  • 1390
  • 1391
  • 1392
  • 1393
  • 1394
  • 1395
  • 1396
  • 1397
  • 1398
  • 1399
  • 1400
  • 1401
  • 1402
  • 1403
  • 1404
  • 1405
  • 1406
  • 1407
  • 1408
  • 1409
  • 1410
  • 1411
  • 1412
  • 1413
  • 1414
  • 1415
  • 1416
  • 1417
  • 1418
  • 1419
  • 1420
  • 1421
  • 1422
  • 1423
  • 1424
  • 1425
  • 1426
  • 1427
  • 1428
  • 1429
  • 1430
  • 1431
  • 1432
  • 1433
  • 1434
  • 1435
  • 1436
  • 1437
  • 1438
  • 1439
  • 1440
  • 1441
  • 1442
  • 1443
  • 1444
  • 1445
  • 1446
  • 1447
  • 1448
  • 1449
  • 1450
  • 1451
  • 1452
  • 1453
  • 1454
  • 1455
  • 1456
  • 1457
  • 1458
  • 1459
  • 1460
  • 1461
  • 1462
  • 1463
  • 1464
  • 1465
  • 1466
  • 1467
  • 1468
  • 1469
  • 1470
  • 1471
  • 1472
  • 1473
  • 1474
  • 1475
  • 1476
  • 1477
  • 1478
  • 1479
  • 1480
  • 1481
  • 1482
  • 1483
  • 1484
  • 1485
  • 1486
  • 1487
  • 1488
  • 1489
  • 1490
  • 1491
  • 1492
  • 1493
  • 1494
  • 1495
  • 1496
  • 1497
  • 1498
  • 1499
  • 1500
  • 1501
  • 1502
  • 1503
  • 1504
  • 1505
  • 1506
  • 1507
  • 1508
  • 1509
  • 1510
  • 1511
  • 1512
  • 1513
  • 1514
  • 1515
  • 1516
  • 1517
  • 1518
  • 1519
  • 1520
  • 1521
  • 1522
  • 1523
  • 1524
  • 1525
  • 1526
  • 1527
  • 1528
  • 1529
  • 1530
  • 1531
  • 1532
  • 1533
  • 1534
  • 1535
  • 1536
  • 1537
  • 1538
  • 1539
  • 1540
  • 1541
  • 1542
  • 1543
  • 1544
  • 1545
  • 1546
  • 1547
  • 1548
  • 1549
  • 1550
enum PaperSize: String {
    case A4, A5, Letter, Legal
}

print(PaperSize(rawValue: "Legal"))
// Prints "Optional("PaperSize.Legal")"

print(PaperSize(rawValue: "Tabloid"))
// Prints "nil"

    
    
    
HStack { Image(systemName: "swift").imageScale(.small); Text("Small") }
HStack { Image(systemName: "swift").imageScale(.medium); Text("Medium") }
HStack { Image(systemName: "swift").imageScale(.large); Text("Large") }


struct CircleImage_Previews: PreviewProvider {
    static var previews: some View {
        CircleImage()
            .previewInterfaceOrientation(.landscapeRight)
    }
}

Label("Lightning", systemImage: "bolt.fill")


Label("Lightning", systemImage: "bolt.fill")
    .labelStyle(.titleOnly)


Label("Lightning", systemImage: "bolt.fill")
    .labelStyle(.iconOnly)



Label("Lightning", systemImage: "bolt.fill")
    .labelStyle(.titleAndIcon)


struct RedBorderedLabelStyle: LabelStyle {
    func makeBody(configuration: Configuration) -> some View {
        Label(configuration)
            .border(Color.red)
    }
}



VStack {
    Label("Rain", systemImage: "cloud.rain")
    Label("Snow", systemImage: "snow")
    Label("Sun", systemImage: "sun.max")
}
.labelStyle(.iconOnly)


Label {
    Text(person.fullName)
        .font(.body)
        .foregroundColor(.primary)
    Text(person.title)
        .font(.subheadline)
        .foregroundColor(.secondary)
} icon: {
    Circle()
        .fill(person.profileColor)
        .frame(width: 44, height: 44, alignment: .center)
        .overlay(Text(person.initials))
}


struct RedBorderedLabelStyle: LabelStyle {
    func makeBody(configuration: Configuration) -> some View {
        Label(configuration)
            .border(Color.red)
    }
}


Label("Lightning", systemImage: "bolt.fill")
    .labelStyle(.titleAndIcon)



VStack {
    Label("Rain", systemImage: "cloud.rain")
    Label("Snow", systemImage: "snow")
    Label("Sun", systemImage: "sun.max")
}
.labelStyle(.titleAndIcon)


var rows: [GridItem] =
        Array(repeating: .init(.fixed(20)), count: 2)
ScrollView(.horizontal) {
    LazyHGrid(rows: rows, alignment: .top) {
        ForEach((0...79), id: \.self) {
            let codepoint = $0 + 0x1f600
            let codepointString = String(format: "%02X", codepoint)
            Text("\(codepointString)")
                .font(.footnote)
            let emoji = String(Character(UnicodeScalar(codepoint)!))
            Text("\(emoji)")
                .font(.largeTitle)
        }
    }
}

ScrollView(.horizontal) {
    LazyHStack(alignment: .top, spacing: 10) {
        ForEach(1...100, id: \.self) {
            Text("Column \($0)")
        }
    }
}

 var columns: [GridItem] =
         Array(repeating: .init(.flexible()), count: 2)
 ScrollView {
     LazyVGrid(columns: columns) {
         ForEach((0...79), id: \.self) {
             let codepoint = $0 + 0x1f600
             let codepointString = String(format: "%02X", codepoint)
             Text("\(codepointString)")
             let emoji = String(Character(UnicodeScalar(codepoint)!))
             Text("\(emoji)")
         }
     }.font(.largeTitle)
 }

ScrollView {
    LazyVStack(alignment: .leading) {
        ForEach(1...100, id: \.self) {
            Text("Row \($0)")
        }
    }
}

Link("View Our Terms of Service",
      destination: URL(string: "https://www.example.com/TOS.html")!)



func marketingLink(_ callToAction: String) -> Link {
    Link(callToAction,
        destination: URL(string: "https://www.example.com/")!)
}


var body: some View {
    List {
        Text("A List Item")
        Text("A Second List Item")
        Text("A Third List Item")
    }
}


struct Ocean: Identifiable {
    let name: String
    let id = UUID()
}
private var oceans = [
    Ocean(name: "Pacific"),
    Ocean(name: "Atlantic"),
    Ocean(name: "Indian"),
    Ocean(name: "Southern"),
    Ocean(name: "Arctic")
]

var body: some View {
    List(oceans) {
        Text($0.name)
    }
}



struct Ocean: Identifiable, Hashable {
    let name: String
    let id = UUID()
}
private var oceans = [
    Ocean(name: "Pacific"),
    Ocean(name: "Atlantic"),
    Ocean(name: "Indian"),
    Ocean(name: "Southern"),
    Ocean(name: "Arctic")
]
@State private var multiSelection = Set<UUID>()

var body: some View {
    NavigationView {
        List(oceans, selection: $multiSelection) {
            Text($0.name)
        }
        .navigationTitle("Oceans")
        .toolbar { EditButton() }
    }
    Text("\(multiSelection.count) selections")
}


struct Ocean: Identifiable, Hashable {
     let name: String
     let id = UUID()
     let stats: [String: String]
 }
 class OceanStore: ObservableObject {
     @Published var oceans = [Ocean]()
     func loadStats() async -> Void {}
 }
 @EnvironmentObject var store: OceanStore
 var body: some View {
     NavigationView {
         List(store.oceans) { ocean in
             HStack {
                 Text(ocean.name)
                 StatsSummary(stats: ocean.stats) // A custom view for showing statistics.
             }
         }
         .refreshable {
             await store.loadStats()
         }
         .navigationTitle("Oceans")
     }
 }


struct ContentView: View {
    struct Sea: Hashable, Identifiable {
        let name: String
        let id = UUID()
    }
    struct OceanRegion: Identifiable {
        let name: String
        let seas: [Sea]
        let id = UUID()
    }
    private let oceanRegions: [OceanRegion]  = [
        OceanRegion(name: "Pacific",
                    seas: [Sea(name: "Australasian Mediterranean"),
                           Sea(name: "Philippine"),
                           Sea(name: "Coral"),
                           Sea(name: "South China")]),
        OceanRegion(name: "Atlantic",
                    seas: [Sea(name: "American Mediterranean"),
                           Sea(name: "Sargasso"),
                           Sea(name: "Caribbean")]),
        OceanRegion(name: "Indian",
                    seas: [Sea(name: "Bay of Bengal")]),
        OceanRegion(name: "Southern",
                    seas: [Sea(name:"Weddell")]),
        OceanRegion(name: "Arctic",
                    seas: [Sea(name: "Greenland")])
    ]
    @State private var singleSelection : UUID?

    var body: some View {
        NavigationView {
            List(selection: $singleSelection){
                ForEach(oceanRegions) { region in
                    Section(header: Text("Major \(region.name) Ocean Seas")) {
                        ForEach(region.seas) { sea in
                            Text(sea.name)
                        }
                    }
                }
            }
            .navigationTitle("Oceans and Seas")
            .toolbar { EditButton() }
        }
    }
}


struct ContentView: View {
    struct FileItem: Hashable, Identifiable, CustomStringConvertible {
        var id: Self { self }
        var name: String
        var children: [FileItem]? = nil
        var description: String {
            switch children {
            case nil:
                return "
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/236184?site
推荐阅读
相关标签