iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Swift5.4 つまみ食い【SE-0284編】

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.

参照: https://github.com/apple/swift-evolution/blob/master/proposals/0284-multiple-variadic-parameters.md#introduction

Swift5.4 からは複数の可変個引数(Variadic Parameters)パラメータが有効になった見たいです。

ちなみに可変長引数は Swiftprint() メソッドなんかでも使われているこんなやつです。

/// - 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")

詳しくはドキュメントも参考にしてみてください。

developer.apple.com

引数を 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")

そもそも可変長引数を使う場面にあまり遭遇したことがないので、個人的にあまり大きな恩恵はありませんが😅

という感じで本日も以上になります🍺

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com