标签: swiftui-environment

在没有 AppDelegate 和 SceneDelegate 的新 SwiftUI 应用程序生命周期中,在哪里可以在我的 iOS 应用程序中配置 Firebase?

我已经有一个可以完全使用 SwiftUI 构建的应用程序。我使用 Firebase 使用 Cloud Functions 进行身份验证和通知。

现在使用新的 SwiftUI App->Scene->View 构造,我无法将设置添加到我的应用程序中。

例如- >初期FirebaseApp.configure()将首先进去didFinishLaunchingWithOptionsAppDelegate,现在我在哪里添加此配置的损失。

设置远程通知也是如此。

PS:如果需要前一个应用程序的更多详细信息/代码,请发表评论。我没有添加任何代码,因为我觉得没有必要。

firebase firebase-authentication swiftui swiftui-environment

24
推荐指数
1
解决办法
3999
查看次数

在 SwiftUI 中的导航栏中设置图像和标题

AppStore 应用程序在 NabBar 的右侧有一个带有大标题的图像图标: 如果有人知道如何实现它或如何实现它的想法,我将不胜感激。

navigation uinavigationbar ios swiftui swiftui-environment

10
推荐指数
1
解决办法
1498
查看次数

SwiftUI 每次都会重新编译 Pod 和所有内容

我正在使用 SwiftUI,看起来很有趣,但我面临着非常烦人的性能问题。

当我创建新的 SwiftUI 文件或在 SwiftUI 视图中进行较大更改时,XCode 将开始重新编译所有内容。即使它们不包含在视图中,它也会重新编译 pod(我正在使用 Firebase)。

这种行为非常痛苦,因为该过程需要几分钟才能完成,而且通常会导致 XCode 错误,并且在画布或设备上有任何内容之前我必须单击“重试”。

使用 SwiftUI 开发时,我可以做些什么来提高性能吗?

这就是我创建一个全新的 SwiftUI 文件时发生的情况 在此输入图像描述

swiftui swiftui-environment

7
推荐指数
1
解决办法
443
查看次数

SwiftUI Timer.publish 导致整个屏幕刷新

全屏刷新GIF

我目前正在学习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 swiftui-environment

6
推荐指数
1
解决办法
1165
查看次数

在同一路径上创建不同的描边样式 - SwiftUI(基于 0-1 之间的值,如渐变)

在 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(虚线)从 …

shapes ios swift swiftui swiftui-environment

6
推荐指数
1
解决办法
961
查看次数

SwiftUI 在多个类之间传递数据

在搜索 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)

binding swiftui combine swiftui-environment

5
推荐指数
1
解决办法
2575
查看次数

SwiftUI:根据@Published 变量对列表进行排序

我正在使用 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 …

swift swiftui swiftui-list swiftui-environment

5
推荐指数
1
解决办法
2619
查看次数

在 SwiftUI Text 中显示已发布的整数

我对 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)

关于如何正确实施这一点有什么想法吗?

swift swiftui swiftui-environment

5
推荐指数
1
解决办法
8201
查看次数

XCode 中仅编辑器视图

我正在使用 swiftUI 编写一个新应用程序。每次我打开一个新文件时,Canvas 都会打开。我希望默认视图为“仅编辑器”,并且我可以随时手动打开画布。

有没有办法更改默认值?

xcode swiftui swiftui-environment

5
推荐指数
1
解决办法
149
查看次数

以编程方式显示可刷新列表的拉动刷新活动指示器

我想知道是否有一种简单的方法可以使 SwiftUI 的刷新控件使用的活动指示器可见List?这将提供一致的刷新 UI 外观,无论刷新是如何启动的。

List使用修饰符启用a上的pull刷新后refreshableLists环境就有了它的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

5
推荐指数
0
解决办法
1199
查看次数