Xcode 8 :function types cannot have argument label breaking my build

后端 未结 5 930
有刺的猬
有刺的猬 2020-11-29 04:41

It seems that for some reason Swift have chosen to make coding in it less readable by forcing users to remove completion handler parameter labels. I have read the Swift dis

5条回答
  •  心在旅途
    2020-11-29 05:02

    You have to use _ to make your parameters unnamed, and that is unfortunate. Instead of tacking _ on to each parameter and then blindly calling your function I would suggest making a wrapper object.

    Since losing named parameters for function types introduces more risk that you will call the function with the wrong values, I would suggest wrapping the parameters in a struct and having that be the one and only parameter to your function.

    This way the fields of you struct are named, and there is only one type of value to pass into your function. It is more cumbersome than if we were able to name the parameters of the function, but we can't. At least this way you'll be safer and you'll feel less dirty.

    struct LineNoteCellState {
    
        var lineNoteText: String?
        var printOnInvoice = false
        var printOnLabel = false
    }
    

    Here is an example of it being used:

    cell.configure(editCallback: { (_ state: LineNoteCellState) in
    
        self.lineNoteText = state.lineNoteText
        self.printOnInvoice = state.printOnInvoice
        self.printOnLabel = state.printOnLabel
    })
    

提交回复
热议问题