返回

使用SwiftUI创建iOS 14小组件-探索实施细节

IOS

从入门到精通:iOS 14小组件的内部结构

在上一节中,我们简单介绍了小组件的基本创建过程,按照图片步骤一步步来应该很简单。在本节中,我们将进一步探索小组件内部到底做了什么事情。

1. 构建小组件的入口

这里就是整个小组件的入口,请记住,小组件有且只有一个@main入口,这里仅展示了创建单个小组件的方式,后续章节将讲解如何创建多个小组件。

import WidgetKit
import SwiftUI

@main
struct MyWidgetBundle: WidgetBundle {
    var body: some Widget {
        MyWidget()
    }
}

2. 定义小组件的结构

这里我们定义了一个名为MyWidget的小组件结构体,它遵循了Widget协议,并实现了body属性。body属性返回了小组件的内容,在本例中,我们使用了一个简单的Text视图来显示"Hello, World!"。

struct MyWidget: Widget {
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: "MyWidget", provider: MyWidgetProvider()) { entry in
            Text("Hello, World!")
        }
    }
}

3. 创建小组件的提供者

小组件提供者负责提供小组件的数据。在本例中,我们创建了一个名为MyWidgetProvider的提供者,它遵循了TimelineProvider协议,并实现了timeline(in:entryDate:completion:)方法。这个方法每隔15分钟被调用一次,以更新小组件的数据。

struct MyWidgetProvider: TimelineProvider {
    func timeline(in context: Context, entryDate: Date, completion: @escaping (Timeline<Entry>) -> Void) {
        let entry = Entry(date: entryDate, text: "Hello, World!")
        let timeline = Timeline(entries: [entry], policy: .atEnd)
        completion(timeline)
    }

    struct Entry: TimelineEntry {
        let date: Date
        let text: String
    }
}

4. 注册小组件

为了使小组件在设备上可见,我们需要将其注册到系统中。这可以通过在Info.plist文件中添加以下代码来完成:

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>WKAppWidget</key>
        <dict>
            <key>bundleID</key>
            <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
            <key>widget</key>
            <dict>
                <key>kind</key>
                <string>MyWidget</string>
                <key>title</key>
                <string>My Widget</string>
                <key>description</key>
                <string>A simple widget that displays "Hello, World!"</string>
                <key>supportedFamilies</key>
                <array>
                    <string>systemSmall</string>
                </array>
            </dict>
        </dict>
    </dict>
</dict>

5. 构建并运行小组件

现在,我们可以构建并运行小组件了。只需在终端中输入以下命令即可:

swift build
swift run

小组件现在应该会出现在你的设备上了。

总结

在本节中,我们详细探索了iOS 14小组件的内部结构,了解了如何定义小组件的入口、结构、提供者,以及如何注册小组件。掌握了这些知识,你就可以开始创建自己的小组件了。在接下来的章节中,我们将讲解如何创建更复杂的小组件,以及如何处理小组件的交互。