问题描述
我正在尝试在 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))
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)