小编G. *_*arc的帖子

如何在预览中设置环境对象

我的视图需要一个环境对象,它通过将它添加到 window.rootViewController 在 SceneDelegate 中设置。如何设置用于预览的环境对象?

swift swiftui

12
推荐指数
2
解决办法
5085
查看次数

如何将 @FocusState 与视图模型一起使用?

我正在为我的 SwiftUI 应用程序使用视图模型,并且希望在视图模型中也具有焦点状态,因为表单非常复杂。

在视图中使用 @FocusState 的实现按预期工作,但不是我想要的:

import Combine
import SwiftUI

struct ContentView: View {
    @ObservedObject private var viewModel = ViewModel()
    @FocusState private var hasFocus: Bool

    var body: some View {
        Form {
            TextField("Text", text: $viewModel.textField)
                .focused($hasFocus)
            Button("Set Focus") {
                hasFocus = true
            }
        }
    }
}

class ViewModel: ObservableObject {
    @Published var textField: String = ""
}
Run Code Online (Sandbox Code Playgroud)

如何将 @FocusState 放入视图模型中?

swiftui

12
推荐指数
3
解决办法
4495
查看次数

如何从引用的架构中排除属性?

我有一个端点用于创建地址和一个用于更新地址。在 OpenAPI 规范中对此进行描述时,我想使用地址组件,这样我就不必两次指定地址。现在的问题是,用于更新的地址对象应该包含属性“id”,但用于创建的地址对象却没有。

所以基本上,我正在寻找一种方法来描述组件部分中的完整地址(包括 id 属性),然后引用创建端点,但不包括那里的“id”属性。

rest data-modeling swagger openapi

9
推荐指数
1
解决办法
8198
查看次数

如何压缩超过 4 个出版商

我正在为我的 API 请求使用 Swift Combine。现在我面临的情况是,我想要将 4 个以上的并行请求压缩在一起。在我使用 Zip4() 运算符将 4 个请求压缩在一起之前。我可以想象您分多个步骤进行压缩,但我不知道如何为其编写 receiveValue。

这是我当前代码的简化,包含 4 个并行请求:

    Publishers.Zip4(request1, request2, request3, request4)
        .sink(receiveCompletion: { completion in
            // completion code if all 4 requests completed
        }, receiveValue: { request1Response, request2Response, request3Response, request4Response in
            // do something with request1Response
            // do something with request2Response
            // do something with request3Response
            // do something with request4Response
        }
    )
        .store(in: &state.subscriptions)
Run Code Online (Sandbox Code Playgroud)

swift combine

8
推荐指数
3
解决办法
3755
查看次数

SwiftUI:MacOS 上的 AppDelegate

我正在将 SwiftUI iOS 应用程序移植到 macOS。它使用 @UIApplicationDelegateAdaptor 属性包装器来绑定 UIApplicationDelegate 类。不幸的是,UIApplicationDelegate 类在 macOS 上不可用,所以我想知道如何绑定我的自定义 AppDelegate。

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
    ...
    }
}

struct MyApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

macos swiftui

8
推荐指数
2
解决办法
4741
查看次数

SwiftUI 中 Stepper 的奇怪行为

我想使用 onIncrement 和 onDecrement 在手动(非绑定)模式下使用步进视图。当我尝试实现下限和上限时,会出现奇怪的行为,例如。年龄值不低于 1 或高于 10。

如果您尝试以下代码,则可以在其值已为“1”后按两次“-”。它并没有像预期的那样低于 1,但是在再按两次之后,“-”按钮突然被禁用。如果您随后按“+”,则不会发生任何事情。仅在再按 2 次“+”后,计数器才会按预期做出反应并变为 2。

这是一个错误吗?

struct StepperTest: View {
    @State private var age = 5

    var body: some View {
        VStack {
            Stepper("Enter your age", onIncrement: {
                if self.age < 10 {
                    self.age += 1
                    print("Adding to age")
                }
            }, onDecrement: {
                guard self.age > 1 else { return }
                self.age -= 1
                print("Subtracting from age")
            })

            Text("Your age is \(age)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

stepper swiftui

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

如何在SwiftUI中将NavigationLink显示为按钮

我在这里已经阅读了很多有关SwiftUI中导航的信息,并尝试了几件事,但是没有任何工作可以按需进行。

基本上,我有一个包含锻炼列表的视图,您可以通过单击一行来显示一个锻炼。使用NavigationView和NavigationLink可以按预期工作。

现在,我要在详细信息视图上单击一个按钮以开始锻炼。这应该打开一个带有计时器的视图。该视图应显示与详细视图相同的动画,并在导航栏中使用后退按钮显示锻炼的名称。

我可以在详细信息页面上的NavigationLink视图中实现此功能,但是该链接始终显示为全宽行,并在右侧显示箭头。我希望这是一个按钮,但是NavigationLink似乎可以抵抗样式。

struct WorkoutDetail: View {
    var workout: Workout

    var body: some View {
        VStack {
            NavigationLink(destination: TimerView()) {
                Text("Starten")
            }.navigationBarTitle(Text(workout.title))
        }
    }
}

struct WorkoutList: View {
    var workoutCollection: WorkoutCollection

    var body: some View {
        NavigationView {
            List(workoutCollection.workouts) { workout in
                NavigationLink(destination: WorkoutDetail(workout: workout)) {
                    WorkoutRow(workout: workout)
                }
            }.navigationBarTitle(Text("Workouts"))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:这是一个截图,以说明我的意思:

在此处输入图片说明

navigation swiftui

6
推荐指数
7
解决办法
3795
查看次数

在 SwiftUI 中使用自己的 ButtonStyle 在 tvOS 上无法选择按钮

将标准按钮样式替换为自定义按钮样式后,该按钮在 tvOS 上不再可选(它在 iOS 上按预期工作)。PlainButtonStyle() 中是否有我缺少的特殊修饰符?或者这是 SwiftUI 中的一个错误?

这是有效的截图:

Button(
    action: { },
    label: { Text("Start") }
).buttonStyle(PlainButtonStyle())
Run Code Online (Sandbox Code Playgroud)

这是一个没有的:

Button(
    action: { },
    label: { Text("Start") }
).buttonStyle(RoundedButtonStyle())
Run Code Online (Sandbox Code Playgroud)

其中 RoundedButtonStyle() 定义为:

struct RoundedButtonStyle: ButtonStyle {
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .padding(6)
            .foregroundColor(Color.white)
            .background(Color.blue)
            .cornerRadius(100)
    }
}
Run Code Online (Sandbox Code Playgroud)

tvos swiftui

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

如何模拟 DataTaskPublisher?

我正在尝试使用 URLSession.DataTaskPublisher 为我的 API 编写一些单元测试。我在 Stackoverflow 上发现了一个已经存在的问题,但我正在努力使用建议的解决方案来实现一个工作班级。

这是现有的问题:如何模拟 URLSession.DataTaskPublisher

protocol APIDataTaskPublisher {
    func dataTaskPublisher(for request: URLRequest) -> URLSession.DataTaskPublisher
}

class APISessionDataTaskPublisher: APIDataTaskPublisher {
    func dataTaskPublisher(for request: URLRequest) -> URLSession.DataTaskPublisher {
        return session.dataTaskPublisher(for: request)
    }

    var session: URLSession

    init(session: URLSession = URLSession.shared) {
        self.session = session
    }
}

class URLSessionMock: APIDataTaskPublisher {
    func dataTaskPublisher(for request: URLRequest) -> URLSession.DataTaskPublisher {
        // How can I return a mocked URLSession.DataTaskPublisher here?
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 API 然后像这样使用上面的:

class MyAPI {
    /// Shared URL session …
Run Code Online (Sandbox Code Playgroud)

unit-testing swift combine

5
推荐指数
2
解决办法
3012
查看次数

SwiftUI 2.0 中的 navigationBarTitle 和 navigationTitle 有什么区别?

我不明白 navigationBarTitle() 和 navigationTitle() 之间的确切区别。有人可以解释一下什么时候使用哪个吗?

swiftui

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