小编use*_*265的帖子

错误:初始化程序 'init(_:)' 要求 'Binding<String>' 符合 'StringProtocol'

我收到上述错误,无法弄清楚如何解决它。我有一个包含布尔值的对象数组,需要为每个布尔值显示一个切换。

下面是代码。

class Item: Identifiable {
    var id: String
    var label: String
    var isOn: Bool
}

class Service: ObservableObject {
    var didChange = PassthroughSubject<Void, Never>()

    var items: [Item] {
        didSet {
            didChange.send(())
        }
    }
}

struct MyView: View {
    @ObservedObject var service: Service

    var body: some View {
        List {
            ForEach(service.items, id: \.self) { (item: Binding<Item>) in
                Section(header: Text(item.label)) {  // Error: Initializer 'init(_:)' requires that 'Binding<String>' conform to 'StringProtocol'
                    Toggle(isOn: item.isOn) {
                        Text("isOn")
                    }
                }
            }
        }
        .listStyle(GroupedListStyle())
    } …
Run Code Online (Sandbox Code Playgroud)

swift swiftui combine

16
推荐指数
1
解决办法
2万
查看次数

在 SwiftUI 中发布辅助功能通知

我需要将辅助功能焦点移至屏幕上的某个元素。在 UIKit 中,我可以简单地调用UIAccessibility.post(.screenChanged, element).

当我使用 SwiftUI 视图执行此操作时,应用程序崩溃并在控制台中显示以下消息:

This class '__SwiftValue' is not a known serializable element and returning it as an accessibility element may lead to crashes
Run Code Online (Sandbox Code Playgroud)

知道如何将焦点移动到 SwiftUI 屏幕上的某些元素吗?

uiaccessibility swiftui uiaccessibility-notification

12
推荐指数
1
解决办法
1609
查看次数

SwiftUI - 设置背景颜色时大型导航栏被破坏

我遇到了一个非常奇怪的错误,并且不知道如何解决它。我有一个带有导航标题的导航视图。我注意到,当我更改其包含视图的背景颜色时,导航栏与屏幕内容重叠,而不是切换到内联情绪。见下文。 在此输入图像描述

如果我删除设置背景颜色的一行,那么一切都会正常。有人遇到过类似的情况吗?你是如何解决的?

struct ContentView: View {
  var body: some View {
    NavigationView {
      ScrollView {
        VStack(alignment: .leading) {
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 10")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 11")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 12")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 13")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 14")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 15")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 16")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 17")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 18")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 19")
        }
        VStack(alignment: .leading) {
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 10")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 11")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 12")
          Text("djsgfjsdgf jhdjfhjhjh jdhfsjh 13")
          Text("djsgfjsdgf jhdjfhjhjh …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

11
推荐指数
1
解决办法
939
查看次数

Swiftlint 覆盖与 SPM 相关的项目设置

我遇到了 swiftlint 自动更正的奇怪行为。我的项目使用通过 SPM 导入的库。但是当我运行 linter 时,它会更改如下设置

B4621A7323D0A90F00545ADE /* LibraryName in Frameworks */ = {isa = PBXBuildFile; productRef = B4621A7223D0A90F00545ADE /* LibraryName */; };

files = (
    B4621A7323D0A90F00545ADE /* LibraryName in Frameworks */,

packageProductDependencies = (
    B4621A7223D0A90F00545ADE /* LibraryName */,

packageReferences = (
    B4621A7123D0A90F00545ADE /* XCRemoteSwiftPackageReference "library-name" */,
Run Code Online (Sandbox Code Playgroud)

像这样的事情

B4621A7323D0A90F00545ADE /* BuildFile in Frameworks */ = {isa = PBXBuildFile; productRef = B4621A7223D0A90F00545ADE /* SwiftPackageProductDependency */; };

files = (
    B4621A7323D0A90F00545ADE /* BuildFile in Frameworks */,

packageProductDependencies = (
    B4621A7223D0A90F00545ADE /* …
Run Code Online (Sandbox Code Playgroud)

xcode swift swift-package-manager swiftlint

8
推荐指数
1
解决办法
590
查看次数

SwiftUI 中的单元测试

我正在尝试为 SwiftUI 视图编写单元测试,但在网络上找到零资源以了解如何去做。

我有如下观点

struct Page: View {
@EnvironmentObject var service: Service

var body: some View {
    NavigationView {
        ScrollView(.vertical) {
            VStack {
                Text("Some text"))
                    .font(.body)
                    .navigationBarTitle(Text("Title")))

                Spacer(minLength: 100)
            }
        }
   }
}
}
Run Code Online (Sandbox Code Playgroud)

我开始写这样的测试

func testPage() {
    let page = Page().environmentObject(Service())
    let body = page.body
    XCTAssertNotNil(body, "Did not find body")
}
Run Code Online (Sandbox Code Playgroud)

但是,我如何获得身体内部的意见呢?我如何测试它们的属性?任何帮助表示赞赏。

更新:事实上,即使这样也行不通。我收到以下运行时异常

Thread 1: Fatal error: body() should not be called on  ModifiedContent<Page,_EnvironmentKeyWritingModifier<Optional<Service>>>.
Run Code Online (Sandbox Code Playgroud)

xctest swift swiftui

7
推荐指数
2
解决办法
2938
查看次数

SwiftUI:绑定数组的安全下标

我们习惯于在访问集合中的任何元素时使用安全下标。下面是我们的扩展。

extension Collection {
    subscript(safe index: Index) -> Element? {
        return indices.contains(index) ? self[index] : nil
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将它与绑定对象一起使用时,它给了我一个错误说

下标中的无关参数标签“安全:”

下面是有问题的代码

struct MyView: View {
    @ObservedObject var service: service

    var body: some View {
        List {
            ForEach(service.items.indices) { index in
                Toggle(isOn: self.$service.items[safe: index]?.isOn ?? false) {  // Error: Extraneous argument label 'safe:' in subscript
                    Text("isOn")
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swift swiftui combine

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

为什么我的合并管道中从未调用 sink ?

这是我的管道:

URLSession.shared
      .dataTaskPublisher(for: urlRequest)
      .map { $0.data }
      .mapError { ...... }
      .eraseToAnyPublisher()
      .decode(type: MyObject.self, decoder: JSONDecoder())
      .receive(on: RunLoop.main)
      .catch { [weak self] error -> Just<MyObject> in
        guard let self = self else { return Just(emptyPayload) }
        self.hasError = true
        return Just(emptyPayload)
    }
    .sink(
      receiveCompletion: { [weak self] _ in
        print("i'm here")
      },
      receiveValue: { [weak self] value in
        print("value")
      }
    )
Run Code Online (Sandbox Code Playgroud)

为什么从不调用 sink ?

nsurlsession swift combine

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

SwiftUI双导航栏

我在SwiftUI中导航时遇到问题。我在导航栏上有一个按钮,如果单击该按钮,则会推入带有项目列表的新导航视图。轻触其中一项时,它将推送详细视图。

但是我最终会遇到这样的事情。 在此处输入图片说明

下面是代码

struct FirstView: View {

   var body: some View {
       NavigationView {
           List {
            ...
           }
           .navigationBarTitle(Text("First View"))
           .navigationBarItems(trailing: MyButton())
       }
    }
}

struct MyButton: View {
    var body: some View {
        NavigationLink("SecondView", destination: SecondView())
    }
}

struct SecondView: View {
   var body: some View {
       NavigationView {
           Text("My View")
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

swift swiftui

3
推荐指数
1
解决办法
169
查看次数

VStack 中的 SwiftUI 视图相互重叠

我在 VStack 中有两个视图。一切看起来都很好,直到我尝试在可访问性设置中放大字体。然后由于某种原因堆栈没有扩展以容纳两个视图。相反,它是将一个视图推到另一个视图之上。见下文。 在此处输入图片说明

我怎样才能正确对齐这些?下面是我的代码。

 var body: some View {
    VStack(spacing: 10) {
        Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.")
            .fixedSize(horizontal: false, vertical: true)
            .padding()

        GeometryReader { geometry in
            VStack(spacing: 0) {
                Image("tmp")
                    .resizable()
                    .scaledToFill()
                    .frame(width: geometry.size.width * 0.88)

                VStack(spacing: 10) {
                    Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit")
                        .frame(width: geometry.size.width …
Run Code Online (Sandbox Code Playgroud)

swiftui

2
推荐指数
1
解决办法
1524
查看次数

SwiftUI:切换切换时触发事件

当切换状态发生变化时,我需要发布通知。我找不到指定切换操作的方法。知道我该怎么做吗?

var body: some View {
    List {
        ForEach(items.indices) { index in
            Section(header: Text(self.items[index].label)) {
                Toggle(isOn: self.$items[index].isOn) {
                    Text("Enabled")
                }
            }
        }
    }
    .listStyle(GroupedListStyle())
}
Run Code Online (Sandbox Code Playgroud)

但是然后呢??

swift swiftui

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