SwiftUI-2 使用场景指定应用程序视图层次结构

A scene contains the view hierarchy of your app.

场景包含应用程序的视图层次结构。

SwiftUI提供了帮助创建应用程序用户界面的构建块(Building Blocks)。Scene就是其中一个构建块,它包含定义用户程序用户界面的视图层次结构。开发者可以在SwiftUI提供的场景中指定应用程序的视图层次结构,也可以创建自定义的场景。

将场景添加到应用程序

// MyApp.swift

import SwiftUI

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            TabView {
                ContentView()
                    .tabItem {
                        Label("Journal", systemImage: "book")
                    }
                SettingsView()
                    .tabItem {
                        Label("Settings", systemImage: "gear")
                    }
            }
        }
    }
}
  • Computed body property(计算属性body)可以返回一个或多个主要和次要的Scenes。

  • 在此示例中,body返回主场景WindowGroup

  • 视图层次结构的根节点是TabView,这是一个容器视图,它可以提供一些选项卡,并且可以使用这些选项卡在不同的子视图直接切换。

  • TabView包含两个自定义子视图:ContentViewSettingsView.

  • .tabItem告诉TabView每个选项卡中显示的图像和文本。

定义其它的视图层次结构

// MyApp.swift

import SwiftUI

@main
struct MyApp: App {
    var body: some Scene {
        #if os(iOS)
        WindowGroup {
            TabView {
                ContentView()
                    .tabItem {
                        Label("Journal", systemImage: "book")
                    }

                SettingsView()
                    .tabItem {
                        Label("Settings", systemImage: "gear")
                    }
            }
        }
        #elseif os(macOS)
        WindowGroup {
            AlternativeContentView()
        }

        Settings {
            SettingsView()
        }
        #endif
    }
}

该示例使用了平台条件编译块(Platform Conditional Compilation Block,有关条件编译块的更多信息,请参见[编译器控制语句](Statements — The Swift Programming Language (Swift 5.7))),#if os(iOS)告诉Swift编译器仅在目标平台为iOS时编译代码,#elseif os(macOS)同样表示用单独的平台有条件的编译Mac应用程序的场景,条件编译块以#endif结束。

  • 在iOS平台,该示例使用包含TabView的WindowGroup场景定义视图层次。并且,TabView包含两个子视图:ContentView和SettingsView。

  • 在macOS平台,使用WindowGroup场景中的其它视图层次,此层次结构的根节点是自定义视图AlternativeContentView

  • Settings {}场景仅在macOS中可用,示例使用次要场景(Secondary Scene)Settings来提供可在应用程序菜单中使用设置菜单项。设置场景包含了自定义视图SettingView

创建自定义场景

自定义场景可以帮助代码更具可读性和更易于维护。

A custom scene is one that you compose from other scenes.

自定义场景是从其它场景合成的场景。

自定义场景MyScene是为了描述在iOS设备上显示的场景,MyScene遵循Scene

// MyScene.swift

import SwiftUI

struct MyScene: Scene {
    var body: some Scene {
        WindowGroup {
            TabView {
                ContentView()
                    .tabItem {
                        Label("Journal", systemImage: "book")
                    }

                SettingsView()
                    .tabItem {
                        Label("Settings", systemImage: "gear")
                    }
            }
        }
    }
}
  • 符合Scene的结构必须实现计算属性body,就像遵循App协议的结构一样。

同样的自定义场景MyAlternativeScene是为了描述在macOS设备上显示的场景,MyAlternativeScene遵循Scene。并必须实现计算属性body

// MyAlternativeScene.swift

import SwiftUI

struct MyAlternativeScene: Scene {
    var body: some Scene {
        WindowGroup {
            AlternativeContentView()
        }

        #if os(macOS)
        Settings {
            SettingsView()
        }
        #endif
    }
}

重构代码使用自定义场景

// MyApp.swift


import SwiftUI

@main
struct MyApp: App {
    var body: some Scene {
        #if os(iOS)
        MyScene()
        #elseif os(macOS)
        MyAlternativeScene()
        #endif
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
逻辑视图在软件工程中有多种应用场景,以下是一些常见的应用场景: 1. 系统设计:逻辑视图可以帮助开发人员理解系统的功能和行为,从而指导系统设计。通过分析和建模系统的逻辑结构和组成,开发人员可以确定系统的模块划分和接口设计,确保系统能够实现所需的功能。 2. 沟通与协作:逻辑视图可以作为开发团队之间沟通和协作的工具。通过共享逻辑视图,团队成员可以更好地理解系统的功能和逻辑,从而更好地分工和协作。此外,逻辑视图还可以用于与项目相关方进行沟通,以确保对系统需求和设计的共同理解。 3. 系统分析与测试:逻辑视图可以帮助开发人员进行系统分析和测试。通过分析逻辑视图,开发人员可以确定系统的输入、输出和处理过程,从而进行系统的功能测试和性能分析。此外,逻辑视图还可以用于识别系统中的潜在问题和风险,并进行相应的调整和改进。 4. 系统维护与演化:逻辑视图可以使系统的维护和演化更加容易。通过了解系统的逻辑结构和组成,开发人员可以快速定位和理解系统中的功能模块和交互方式,从而更好地进行系统的修复、升级和扩展。 总之,逻辑视图在软件工程中具有广泛的应用场景,可以帮助开发人员理解和设计系统的功能和行为。它是软件开发过程中不可或缺的一部分,可以提高系统的质量和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二流人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值