Hello,
In Swift you can reference a function with it's complete name. For example, if you have the following functions:
func add(num1: Int, num2: Int) -> Int
func add(num1: Int, num2: Int, num3: Int) -> Int
Then you can get a reference to the second like this:
let function = add(num1:num2:num3:)
Works well.
Imagine now, that you have some similar functions with default parameters to log to a file as a debug-log, warning or error, for example:
func debug(_ message: String, eventid: String = Foundation.UUID().uuidString, logFile: String = "log.log", evenIdents: Bool = true) -> String
func warning(_ message: String, eventid: String = Foundation.UUID().uuidString, logFile: String = "log.log", evenIdents: Bool = true) -> String
func error(_ message: String, eventid: String = Foundation.UUID().uuidString, logFile: String = "log.log", evenIdents: Bool = true) -> String
If you want to reference the functions, for example, in a switch, it's not possible like this (omitting two default parameters):
let function: (String, String) -> String
switch logStyle {
case .debug:
function = Log.debug(_:logFile:) // Error
case .warning:
function = Log.warning(_:logFile:) // Error
case .error:
function = Log.error(_:logFile:) // Error
}
Although you can call one of them like this:
Log.debug("Hello World!", logFile: "log.log")
I think, this should be possible, and also that it improves the consistency of Swift.
What do you think about it?
Best regards
Josef Zoller