小编gre*_*rey的帖子

如何在 Xcode 中调试“前提失败”?

我正在 Xcode 11 上构建一个 SwiftUI 应用程序,但是每当我切换到应用程序中的特定选项卡时都会立即终止。

问题是,它总是指向Application Delegate文件,我认为这并不是真正的问题。我也在控制台中收到此错误,仅此precondition failure: invalid input index: 2而已,没有关于此错误来自哪个文件、数组或函数的更多详细信息。

在此处输入图片说明

Xcode 中是否有任何方法可以隔离导致此问题的原因?

debugging xcode swift swiftui

22
推荐指数
3
解决办法
8173
查看次数

如何在不使用ForEach的情况下从SwiftUI中的列表中删除行分隔符?

我有这段代码来显示自定义行的列表。

struct ContentView : View {
    var body: some View {
        VStack(alignment: .leading) {
            List(1...10) {_ in
                CustomRow()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想删除每一行上的行。我尝试不使用List,而是使用ForEachinside,ScrollView但是它完全删除了所有样式,包括其填充和边距。我只想删除行,仅此而已。

请帮忙,谢谢。

swift swiftui

19
推荐指数
7
解决办法
4797
查看次数

如何使用自定义Xcode Cloud环境变量?

environment variables我们在Xcode 方案中有这些

在此输入图像描述

这段代码在本地运行良好

let webHost = ProcessInfo.processInfo.environment["HOST_URL"]!
let apiHost = ProcessInfo.processInfo.environment["API_URL"]!
let beamsKey = ProcessInfo.processInfo.environment["BEAMS_KEY"]!
let mixpanelKey = ProcessInfo.processInfo.environment["MIXPANEL_KEY"]!
Run Code Online (Sandbox Code Playgroud)

但是,当使用Xcode Cloud与相同的environment variables.

在此输入图像描述

它构建成功,但应用程序因该日志而崩溃。

在此输入图像描述

使用Xcode Cloud时读取这些环境变量的正确方法是什么?

xcode swift xcode-cloud

10
推荐指数
3
解决办法
4929
查看次数

是否有可能使“任何协议”符合 Codable?

我正在尝试在 Swift 5.7 中创建一个Codable结构体[any Protocol]

struct Account: Codable {
    var id: String
    var name: String
    var wallets: [any Wallet]
}

protocol Wallet: Codable {
    var id: String { get set }
    //... other codable properties
}
Run Code Online (Sandbox Code Playgroud)

但是,即使Wallet符合Codable

类型“帐户”不符合协议“可解码”

类型“帐户”不符合协议“可编码”

是否可以做出any符合Codable

或者 Swift 5.7 仍然无法做到这一点?

编辑正如回答的那样,您必须实现自己的一致性。这就是我的做法:

protocol Wallet: Identifiable, Codable {
    var id: String { get set }
}

struct DigitalWallet: Wallet {
    var id: String
    // other properties …
Run Code Online (Sandbox Code Playgroud)

swift swift-protocols codable

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

如何将 Swift 宏与 @Observable 和 @Environment 一起使用?

我正在尝试通过以下代码使用 @Observable 和 @Environment 来使用新的 Swift 宏:

import SwiftUI
import Observation

@Observable class Note {
    var text = ""
}

struct ContentView: View {
    @State var note = Note()
    
    var body: some View {
        FormView()
            .environment(note)
    }
}

struct FormView: View {
    @Environment(Note.self) var note
    
    var body: some View {
        Form {
            TextField("write here", text: $note.text)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,无法构建并出现以下错误:

Cannot find '$note' in scope

删除$in 的$note结果是:

Cannot convert value of type 'String' to expected argument …

xcode swift swift5 swiftui swift-macro

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

如何在每个选择更改的 NavigationSplitView 详细信息上运行“task”或“onAppear”?

我试图NavigationSplitView与其中DetailView包含taskor 的a 一起使用onAppear,但它似乎只运行一次。

enum MenuItem: String, Hashable, Identifiable, CaseIterable {
    case menu1
    case menu2
    case menu3
    case menu4
    case menu5
    
    var id: String { rawValue }
}

struct ContentView: View {
    @State var selection: MenuItem?
    
    var body: some View {
        NavigationSplitView {
            List(MenuItem.allCases, selection: $selection) { item in
                NavigationLink(value: item) {
                    Text(item.rawValue)
                }
            }
        } detail: {
            if let selection {
                DetailView(menuItem: selection)
            } else {
                Text("Default")
            }
        }
    }
}

struct …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink swiftui-navigationsplitview

6
推荐指数
2
解决办法
966
查看次数

在 iPad 上使用 SwiftUI NavigationView 在代码中切换侧边栏

我正在尝试通过使用NavigationView来利用SwiftUI 2.0 的内置侧边栏,如下所示:

NavigationView {
   MainView()
   ListView()
   DetailView()
}.navigationBarHidden(true)
Run Code Online (Sandbox Code Playgroud)

但由于我想使用自己的自定义后退按钮,因此我隐藏了导航栏并尝试使用不起作用的代码切换侧边栏。

self.presentationMode.wrappedValue.dismiss()
Run Code Online (Sandbox Code Playgroud)

我已经看到了很多针对macOS的解决方案:

NSApp.keyWindow?.firstResponder?.tryToPerform(#selector(NSSplitViewController.toggleSidebar(_:)), with: nil)
Run Code Online (Sandbox Code Playgroud)

但我似乎找不到iPad的同等产品,提前致谢。

swift swiftui ipados

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

NavigationSplitView 内的 SwiftUI NavigationStack 无法在 iPhone 和 iPad 上运行

我正在尝试使用NavigationStack内部NavigationSplitView

struct ContentView: View {
    @State var mainMenu: MenuItem?
    @State var subMenu: SubMenuItem?
    
    var body: some View {
        NavigationSplitView {
            List(MenuItem.allCases, selection: $mainMenu) { item in
                NavigationLink(value: item) {
                    Text(item.rawValue)
                }
            }
        } detail: {
            NavigationStack {
                List(SubMenuItem.allCases, selection: $subMenu) { item in
                    NavigationLink(value: item) {
                        Text(item.rawValue)
                    }
                }
                .navigationDestination(for: SubMenuItem.self) { selected in
                    DetailView(item: selected)
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
struct DetailView: View {
    let item: SubMenuItem
    
    var body: some View {
        Text(item.id)
    }
} …
Run Code Online (Sandbox Code Playgroud)

ios swiftui swiftui-navigationlink swiftui-navigationsplitview swiftui-navigationstack

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