这个例子是可行的,但如果我需要添加init来做一些准备工作,我就无法找到传递回调的方法.在实际代码中,我需要传递几个参数并进行一些其他初始化.

import SwiftUI

struct Choices: View
{
    let choices = ["One", "Two", "Three"]
    @State var choice:String = "One"
    let callback: (String) -> ()
    
/*
init()
{
  // do stuff here
}
*/

    var body: some View
    {
        VStack(alignment: .leading)
        {
            ForEach(choices, id:\.self)
            { c in
                HStack
                {
                    Image(systemName: (choice == c) ? "checkmark.square" : "square")
                    Text(c)
                }.onTapGesture
                {
                    choice = c
                    callback(c)
                }
            }
            Divider()
        }.padding()
    }
}

struct ChoicesContentView: View
{
    @State var answers:[String] = ["","",""]
    
    var body: some View
    {
        VStack(alignment: .leading)
        {
            ForEach(0..<3)
            { i in
                Choices()
                {
                    ans in
                    print(ans)
                }
                Text("Selected: \(answers[i])")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ChoicesContentView()
    }
}

如何将回调作为参数传递?

谢谢你的帮助.

推荐答案

它可以像

struct Choices: View
{
    let choices = ["One", "Two", "Three"]
    @State var choice:String = "One"
    let callback: (String) -> ()
    
    init(callback: @escaping (String) -> ()) {    // << here !!
        self.callback = callback
    }
// ...
}

甚至使用默认值

init(callback: @escaping (String) -> () = { _ in }) {    // << here !!
    self.callback = callback
}

Swift相关问答推荐

如何在向照片添加文本时定义文本对齐、文本背景的Alpha和在文本之前添加图像

如何在DATE()中进行比较

swift:只要框架名称中有一个带有框架名称的公共实体,就指定框架中公共 struct 的路径

调度组是否阻止iOS中的主线程?

Swift String.firstIndex(of: "\n") 返回 nil,即使字符串有 \n

为什么 XUIView 中的 Binding 看不到更新后的值?

将弱引用作为类函数引用传递时,弱引用无法按预期工作

如何从另一个 swift 文件中调用函数

在 SwiftUI 中的 ForEach 中使用 id 时如何为数组设置动画索引

持久化字符串列表属性 RealmSwift

RxSwift:share() 替代方案,保证upstream 的单一订阅

在 Swift 中计算两个日期之间的差异

调整文本的字体大小以适应 UIButton

如何在今天的扩展(iOS)中访问 CoreData 模型

TabView 在切换选项卡时重置导航堆栈

判断用户是否登录到 iCloud?Swift /iOS

迭代 Firebase 中的子快照

Swift 中的 recursiveDescription 方法?

Swift:长按手势识别器 - 检测轻按和长按

Swift 正则表达式:字符串是否与模式匹配?