返回
使用SwiftUI创建iOS 14小组件-探索实施细节
IOS
2024-01-24 19:17:16
从入门到精通: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小组件的内部结构,了解了如何定义小组件的入口、结构、提供者,以及如何注册小组件。掌握了这些知识,你就可以开始创建自己的小组件了。在接下来的章节中,我们将讲解如何创建更复杂的小组件,以及如何处理小组件的交互。