我正在尝试使用 AppStorage 属性包装器在用户默认值中存储字符串数组,如下所示:
@AppStorage("History") var history: [String] = ["End of history"]
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误No exact matches in call to initializer
如果我没记错的话,这是 AppStorage 的限制吗?因为 UserDefaults 可以存储数组?我可以使用什么解决方法?
首先要明确的是,我不是在问如何向 SwiftUI 添加自定义字体,而是在问如何使用自定义字体扩展 Font 类型。
例如,我使用自定义字体Manrope。我将 ttf 文件添加到我的项目中,并将其添加到我的信息 plist 中。目前我必须使用这样的字体:
.font(.custom("Manrope-SemiBold", size: 24))
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以扩展 Font,以便我可以像这样使用 Manrope
.font(.manrope.semibold())
Run Code Online (Sandbox Code Playgroud)
或者
.font(.manrope("Semibold"))
Run Code Online (Sandbox Code Playgroud) 我在网上找到了在 json 文件中使用硬编码 uuid 的示例,并且这些示例非常适合我,但是当我在应用程序中添加从 json 数组中删除项目的功能时,我需要动态创建这些 uuid
这是我的json文件(list.json),它曾经有硬编码的id,如“id”:1并且有效(当我使用int作为ids时)
[
{
"name": "Dune",
"author": "Frank Herbert",
"page": "77"
},
{
"name": "Ready Player One",
"author": "Ernest Cline",
"page": "234"
},
{
"name": "Murder on the Orient Express",
"author": "Agatha Christie",
"page": "133"
}
]
Run Code Online (Sandbox Code Playgroud)
这是我的结构(Book.swift)
struct Book: Hashable, Codable, Identifiable {
var id = UUID()
var name: String
var author: String
var page: String
}
Run Code Online (Sandbox Code Playgroud)
当我使用此结构和代码(Data.swift)解码我的 json 文件时...
let bookData: [Book] = load("list.json")
func load<T: Decodable>(_ filename: String) -> T …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 Unsplash API 获取数据,但收到以下错误:“不允许从后台线程发布更改;请确保在模型更新时从主线程发布值(通过 receive(on:) 等运算符)” ”。
这是模型结构:
// MARK: - UnsplashData
struct UnsplashData: Codable {
let id: String
let createdAt, updatedAt, promotedAt: Date
let width, height: Int
let color, blurHash: String
let unsplashDataDescription: String?
let altDescription: String
let urls: Urls
let links: UnsplashDataLinks
let categories: [String]
let likes: Int
let likedByUser: Bool
let currentUserCollections: [String]
let sponsorship: JSONNull?
let user: User
let exif: Exif
let location: Location
let views, downloads: Int
enum CodingKeys: String, CodingKey {
case id
case …Run Code Online (Sandbox Code Playgroud) 我正在跟踪 Fromm wwdc 2020 上的小部件代码,在第一部分中他们提到使用新的占位符 api 和.isPlacholder. 所以我尝试在我的小部件中实现它,如下所示:
struct PlaceholderView: View {
var body: some View {
RandomWidgetView(book: testBook)
.isPlaceholder(true)
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误Value of type 'RandomWidgetView' has no member 'isPlaceholder'。谷歌搜索后我发现了这个:
struct PlaceholderView: View {
var body: some View {
RandomWidgetView(book: testBook)
.redacted(reason: .placeholder)
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这并没有创建正确的占位符,而是完全删除了内部的视图。
我是否缺少导入或者自 wwdc 以来它已更改?如何创建正确的占位符?
public struct CircularProgressView: View {
var count: Int
var total: Int
var progress: CGFloat
var fontOne: Font = Font.system(size: 75, weight: .bold, design: .rounded)
var fontTwo: Font = Font.system(size: 25, weight: .bold, design: .rounded)
var colorOne: Color = Color.primary
var colorTwo: Color = Color.gray
var fill = LinearGradient(gradient: Gradient(colors: [Color.green, Color.blue]), startPoint: .top, endPoint: .bottom)
var lineWidth: CGFloat = 25.0
public var body: some View {
ZStack{
Circle()
.stroke(lineWidth: lineWidth)
.opacity(0.3)
.foregroundColor(Color.secondary)
Circle()
.trim(from: 0.0, to: …Run Code Online (Sandbox Code Playgroud) 我有一个从我的应用程序获取数据的小部件。该小部件工作正常,但更新不够频繁。理想情况下,我希望它能够在我的应用程序中删除或添加项目时进行更新,因此如果有一种方法可以强制小部件更新,那么这是可行的。否则,如果小部件可以更频繁地获取新数据,那么也可以正常工作。
数据存储在应用程序组中的 json 文件中。我将该数据加载并解码到一个数组中,然后从该数组中选择一个随机项目进行显示。
这是小部件提供程序:
let testBook = Book(id: UUID(), name: "Name", author: "Author", genre: "Error", page: "0", total: "77")
public enum AppGroup: String {
case Livre = "group.com.identifier"
public var containerURL: URL {
switch self {
case .Livre:
return FileManager.default.containerURL(
forSecurityApplicationGroupIdentifier: self.rawValue)!
}
}
}
struct Provider: TimelineProvider {
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date(), book: testBook)
}
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
let entry = SimpleEntry(date: Date(), book: testBook)
completion(entry) …Run Code Online (Sandbox Code Playgroud) swift ×7
swiftui ×5
json ×3
widgetkit ×2
appstorage ×1
arrays ×1
codable ×1
decodable ×1
fonts ×1
ios ×1
package ×1
urlsession ×1
userdefaults ×1
wwdc ×1