如何在swift中初始化闭包变量?

Posted

技术标签:

【中文标题】如何在swift中初始化闭包变量?【英文标题】:How to initialise closure variable in swift? 【发布时间】:2020-02-11 06:15:07 【问题描述】:

这是我的主要结构。我试图在 listView 选择和项目时回电。

struct Home: View 

    @State var selectdItem : Int = 0
    var body: some View 
        VStack

            listView(onselecteditem: selectdItem in
                self.selectdItem = selectdItem
            )
            resultView(selectedItem: self.$selectdItem)

        

    


我想在这个结构的 init 中初始化我的闭包变量。它可以在没有 init 的情况下工作,但我必须使用 init。

struct listView : View

    var onSelectedItem : (Int) -> Void

    init(onselecteditem : (Int) -> Void) 

     // I would like to initialise onSelected closure variable here.   
    

    var body : some View
    
        List(1..<10)
        
            item in
            Text("Item \(item)").onTapGesture 
                self.onSelectedItem(item)
            
        
    

【问题讨论】:

不初始化怎么编译? @Kamran 如果我不使用 init,struct 将自动初始化,我可以使用闭包块来获取值。但由于我必须使用 init,我不知道如何在 init 块中手动分配值。 【参考方案1】:

你可以将closure变量初始化为,

init(onselecteditem : @escaping (Int) -> Void) 
    self.onSelectedItem = onselecteditem

【讨论】:

以上是关于如何在swift中初始化闭包变量?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Swift 不更新闭包外的变量?

如何从 Swift 的闭包中接收方法的输出?

Swift 中的可选闭包属性

在初始化之前使用的变量“theData”,我应该如何修复

在所有成员初始化之前由闭包捕获的 Swift5(+RxSwift) 'self'

从 Objective C 将回调/闭包转换为 Swift