Xcode12.5 beta
がリリースされ、これから Swift5.4
を使う機会もあると思うので少しづつ進化した部分を見ていきたいと思います👀
今回はこちらから。
This proposal seeks to remove the first restriction while leaving the second in place, allowing a function, subscript, or initializer to have multiple variadic parameters so long as every parameter which follows a variadic one has a label.
Swift5.4
からは複数の可変個引数(Variadic Parameters)パラメータが有効になった見たいです。
ちなみに可変長引数は Swift
の print()
メソッドなんかでも使われているこんなやつです。
/// - Parameters: /// - items: Zero or more items to print. /// - separator: A string to print between each item. The default is a single /// space (`" "`). /// - terminator: The string to print after all items have been printed. The /// default is a newline (`"\n"`). public func print(_ items: Any..., separator: String = " ", terminator: String = "\n")
詳しくはドキュメントも参考にしてみてください。
引数を Type...
のようにすることで、引数を配列と同じように取得することができます。この書き方が Swift5.3
以前では、一つの関数に対して一つしか指定することができず、複数設定する場合は下記の leaving
パラメータのように Array
を使用していました。
func assertArgs( _ args: String..., parseTo driverKind: DriverKind, leaving remainingArgs: ArraySlice<String>, file: StaticString = #file, line: UInt = #line ) throws { /* Implementation Omitted */ } try assertArgs("swift", "-foo", "-bar", parseTo: .interactive, leaving: ["-foo", "-bar"])
これが、Swift5.4
からは複数指定できるようになったみたいです。
func assertArgs( _ args: String..., parseTo driverKind: DriverKind, leaving remainingArgs: String..., file: StaticString = #file, line: UInt = #line ) throws { /* Implementation Omitted */ } try assertArgs("swift", "-foo", "-bar", parseTo: .interactive, leaving: "-foo", "-bar")
そもそも可変長引数を使う場面にあまり遭遇したことがないので、個人的にあまり大きな恩恵はありませんが😅
という感じで本日も以上になります🍺
参考
- https://www.hackingwithswift.com/articles/228/whats-new-in-swift-5-4
- https://github.com/apple/swift-evolution/blob/master/proposals/0284-multiple-variadic-parameters.md