我已经有一个可以完全使用 SwiftUI 构建的应用程序。我使用 Firebase 使用 Cloud Functions 进行身份验证和通知。
现在使用新的 SwiftUI App->Scene->View 构造,我无法将设置添加到我的应用程序中。
例如- >初期FirebaseApp.configure()将首先进去didFinishLaunchingWithOptions的AppDelegate,现在我在哪里添加此配置的损失。
设置远程通知也是如此。
PS:如果需要前一个应用程序的更多详细信息/代码,请发表评论。我没有添加任何代码,因为我觉得没有必要。
firebase firebase-authentication swiftui swiftui-environment
我正在使用 SwiftUI,看起来很有趣,但我面临着非常烦人的性能问题。
当我创建新的 SwiftUI 文件或在 SwiftUI 视图中进行较大更改时,XCode 将开始重新编译所有内容。即使它们不包含在视图中,它也会重新编译 pod(我正在使用 Firebase)。
这种行为非常痛苦,因为该过程需要几分钟才能完成,而且通常会导致 XCode 错误,并且在画布或设备上有任何内容之前我必须单击“重试”。
使用 SwiftUI 开发时,我可以做些什么来提高性能吗?
我目前正在学习combine 和MVVM。我的问题是,当我尝试使用timer.publish时,最终我将创建一个停止按钮,它会导致整个屏幕刷新而不是我的.onReceive文本。
我希望有人能给我一些关于我如何错误地使用发布者和观察者的见解。
看法:
import SwiftUI
import Combine
struct ApptCardView: View {
@ObservedObject var apptCardVM: ApptCardViewModel
@State var currentDate = Date()
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
var body: some View {
VStack {
Text("\(currentDate)")
.onReceive(timer) { input in
self.currentDate = input
}
Picker("Seizure Type", selection: $apptCardVM.typeIndex) {
ForEach(0..<apptCardVM.typeChoice.count) {
Text(self.apptCardVM.typeChoice[$0])
}
}.pickerStyle(SegmentedPickerStyle())
}
}
}
Run Code Online (Sandbox Code Playgroud)
查看型号:
import Foundation
import Combine
class ApptCardViewModel: ObservableObject, Identifiable {
@Published var appt: ApptEvent
@Published var typeChoice = ["Quick", "Long", …Run Code Online (Sandbox Code Playgroud) 在 SwiftUI Shapes 中,我们可以使用渐变来制作不同的颜色描边。
例如-
@ViewBuilder
func lineWithSecondColorStyleFromPositionN() -> some View {
let n = 0.5
GeometryReader { gr in
Path { path in
path.move(to: CGPoint(x: 0, y: 0))
path.addLine(to: CGPoint(x: gr.size.width, y: gr.size.height))
}
.stroke(
LinearGradient(stops: [
Gradient.Stop(color: .red, location: 0),
Gradient.Stop(color: .red, location: n),
Gradient.Stop(color: .blue, location: n),
Gradient.Stop(color: .blue, location: 1)
], startPoint: .top, endPoint: .bottom),
style: StrokeStyle(lineWidth: 10, lineCap: .butt)
)
}
.frame(height: 200)
}
Run Code Online (Sandbox Code Playgroud)
是否可以通过任何方式对笔划样式执行相同的操作?
创建这样的东西 -
笔划样式 1(实线)从 0 到n,
描边样式 2(虚线)从 …
在搜索 Apple 的 SwiftUI 文档、Web 和 stackoverflow 之后,我似乎无法弄清楚如何使用多个类并在它们之间传递 EnviromentObject 数据。所有关于 SwiftUI 的 EnvironmentObject、ObservableObjects、Bindings 的文章都展示了如何将数据从模型传递到视图,但如何从一个模型传递到另一个模型。或者我完全以错误的方式思考这个问题。
如何将@Published var 从 A 类传递到 B 类?
在这个简单的 SwiftUI 示例应用程序中,我试图将 @Published 数据从 Settings 类传递到 NetworkManager 类。此应用程序有一个 ContentView,其中包含用户名和密码的两个表单字段,并带有一个按钮,按下该按钮将联系 API 并显示结果。
下面的代码会崩溃,因为 NetworkManager mockService 函数不知道“设置”是什么。我可以在视图中读取“设置”观察到的 EnvironmentObject,但是如何在另一个类中获取该数据?我猜这里与绑定有关,但不确定该怎么做。
场景委托:
...
var settings = Settings()
var networkManager = NetworkManager()
...
let contentView = ContentView()
.environmentObject(settings)
.environmentObject(networkManager)
...
Run Code Online (Sandbox Code Playgroud)
内容视图.swift
class Settings: ObservableObject {
@Published var username: String = ""
@Published var password: String = ""
}
// This function in reality will …Run Code Online (Sandbox Code Playgroud) 我正在使用 SwiftUI 构建 UI,并且我有一个用于构建List元素的数组。现在我想根据@Published来自@EnvironmentObject.
我尝试让数组已经排序,将环境对象传递给排序方法:
List(getArraySorted(environmentObject)) { item in
//do stuff with item
}
Run Code Online (Sandbox Code Playgroud)
这将编译,但如果environmentObject更改,列表将不会更新。我也试过传入environmentObject.variableToBaseSortOn但无济于事。
我尝试在 Swift UI 中对数组进行内联排序:
List(array.sorted(by: { (lhs, rhs) -> Bool in
// do sorting based on self.environmentObject
})) { item in
// do stuff with item
}
Run Code Online (Sandbox Code Playgroud)
这将编译,但崩溃:
Fatal error: No ObservableObject of type EnvironmentObjectClass found.
A View.environmentObject(_:) for EnvironmentObjectClass may be missing as an ancestor of this view.
Run Code Online (Sandbox Code Playgroud)
崩溃中的提示不正确,environmentObject已设置并self.environmentObject …
我对 SwiftUI 相当陌生,遇到了以下问题:
我有一个包含一些整数值的模型,如下所示:
class Game: ObservableObject {
@Published var ownScore:Int = 0
@Published var opponentScore:Int = 0
... some methods
}
Run Code Online (Sandbox Code Playgroud)
我还需要一个视图来显示这些分数,并在这些值发生变化时进行更新。我需要类似的东西,但是,这不起作用,因为这些值是发布的整数。
struct ScoreView: View {
@EnvironmentObject var game: Game
@State var displayOpponent: Bool
var body: some View {
VStack {
if displayOpponent {
Text("Opponent Score")
Text("Score: \(game.$opponentScore)")
} else {
Text("Your Score")
Text("Score: \(game.$ownScore)")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
关于如何正确实施这一点有什么想法吗?
我正在使用 swiftUI 编写一个新应用程序。每次我打开一个新文件时,Canvas 都会打开。我希望默认视图为“仅编辑器”,并且我可以随时手动打开画布。
有没有办法更改默认值?
我想知道是否有一种简单的方法可以使 SwiftUI 的刷新控件使用的活动指示器可见List?这将提供一致的刷新 UI 外观,无论刷新是如何启动的。
List使用修饰符启用a上的pull刷新后refreshable,Lists环境就有了它的refresh项目集,RefreshAction供刷新控件使用。我的猜测是,使用它RefreshAction也可能会触发刷新控件的可见性,我尝试过:
struct MyView : View {
@State var content: Content
var body: some View {
_MyView(content: $content)
.refreshable { // assigning `refresh` to the environment
await refresh()
}
}
private func refresh() async {
// ...
content = newContent
// ...
}
}
struct _MyView : View {
@Environment(\.refresh) private var refresh
// [ content binding, etc... ]
var body: some View …Run Code Online (Sandbox Code Playgroud) pull-to-refresh swift swiftui swiftui-list swiftui-environment
swiftui ×10
swift ×4
ios ×2
swiftui-list ×2
binding ×1
combine ×1
firebase ×1
navigation ×1
shapes ×1
xcode ×1