ios - 小部件在 SwiftUI 中显示为空白
问题描述
我正在尝试在 SwiftUI 中构建一个小部件,但是在加载小部件时,它显示的只是一个空白屏幕。作为小部件和 SwiftUI 的新手,我真的不知道我哪里出了问题,有人可以帮忙吗?即使只是尝试Text("Hello World")
在正文中打印一个简单的内容也无济于事。我一直在学习本教程 - https://swiftrocks.com/ios-14-widget-tutorial-mini-apps。
struct GameProvider: TimelineProvider {
typealias Entry = GameEntry
func placeholder(in context: Context) -> GameEntry {
GameEntry(date: Date(), games: nil)
}
func getSnapshot(in context: Context, completion: @escaping (GameEntry) -> Void) {
let entry = GameEntry(date: Date(), games: nil)
completion(entry)
}
func getTimeline(in context: Context, completion: @escaping (Timeline<GameEntry>) -> Void) {
let currentDate = Date()
let refreshDate = Calendar.current.date(byAdding: .minute, value: 5, to: currentDate)!
self.getLiveGames { resultGames in
if let games = resultGames {
let entry = GameEntry(date: currentDate, games: games)
let timeline = Timeline(entries: [entry], policy: .after(refreshDate))
completion(timeline)
}
}
}
func getLiveGames(handler: @escaping (_ games: [LSGame]?) -> ()){
let request = NSMutableURLRequest(url: SCORESURL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
guard let data = data else {return}
data.decoded(as: LSGameResponse.self) { result in
do {
let res = try result.get()
guard let games = res.results else {
handler(nil)
return
}
if games.count < 1 {
handler(nil)
}
handler(games)
} catch {
handler(nil)
}
}
}.resume()
}
func getFavoriteTeams() -> [String] {
if let userDefaults = UserDefaults(suiteName: "group.com.uSTADIUM.uSTADIUM1"){
let teams = userDefaults.array(forKey: "favoriteTeams") as! [String]
return teams
}
return []
}
}
struct GameEntry: TimelineEntry {
public let date: Date
public let games: [LSGame]?
}
struct Scores_WidgetEntryView : View {
var entry: GameProvider.Entry
var body: some View {
if let games = entry.games {
VStack {
ForEach(0..<games.count) { index in
Text("Hello")
}
}
} else {
Text("No games!")
}
}
}
@main
struct Scores_Widget: Widget {
let kind: String = "Scores_Widget"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: GameProvider()) { entry in
Scores_WidgetEntryView(entry: entry)
}
.configurationDisplayName("My Widget")
.description("This is an example widget.")
.supportedFamilies([.systemLarge])
}
}
struct Scores_Widget_Previews: PreviewProvider {
static var previews: some View {
Scores_WidgetEntryView(entry: GameEntry(date: Date(), games: nil))
.previewContext(WidgetPreviewContext(family: .systemLarge))
}
}
解决方案
推荐阅读
- php - 如何在 PHP PDO for MySQL 中使用 VARBINARY 准备语句?
- python - 如何在 Python 中使用 StratifiedKFold 在 LogisticRegression 中进行参数调整?
- python - 将 1d numpy 数组与一个较小的数组“相乘”并将结果相加
- bash - Bash 用双引号用空格分隔值分割字符串
- grpc - 如何为 Node 编译 gRPC Proto 文件?
- java - 我想继续要求输入,直到提供有效输入表单扫描仪
- javascript - 需要点击绝对元素并触发2个点击事件:1个为绝对元素,另一个为它后面的元素
- mysql - 如果相关表中有数据,SQL n:m 查询返回 TRUE 或 FALSE
- python - Python pandas - 两个具有一些不同时间戳的df的时间序列合并,并用最后一个值重新填充缺失的时间戳
- javascript - 获取按钮单击的输入值以作为查询发送到 API