Sponsor Link
環境&対象
- macOS Ventura 13.1 Beta
- Xcode 14.1
- iOS 16.0
先頭から最大 X 個 取得する
配列の”先頭から最大” X 個を取得する方法を説明します。
いくつ取得したいかはケースバイケースですが、特定の個数を配列の先頭から取得したいことはたまにあります。
以下では、3個 取得したいときの例で説明していきます。
slicing を使った取得
Array は、subscript/([ ]のこと) を使って、要素にアクセスすることができます。この subscript には、Int だけでなく、Range<Int> を渡すこともできます。
したがって、配列の最初の3要素を取得するときには、以下のコードで取得できます。
let array = ...
let firstThree = array[0..3]
一見、動きそうですが、Array の要素が 3 未満の時には、 Array index is out of range エラーとなります。
subscript を使ってアクセスしているので、Array は、要素が存在する/しないを確認せずにアクセスしようとしますので、要素数が少なければエラーになってしまいます。
Array に 取得したい数以上含まれているのであれば良いのですが、そうでないときには対応が必要となります。
要素数が少ないケースでも取得できるようにするには、いろいろな書き方がありますが、switch 文で書くと、以下のようになります。
let array = ...
switch array.count {
case 0:
return []
case 1:
return array[0..1]
case 2:
return array[0..2]
default:
return array[0..3]
}
今度は動きます。
ですが、あまり綺麗な書き方ではないように見えます。
Array
良い方法はないかと、Array のドキュメントを見ても、良さげなメソッドは、Array には見つかりません。
Apple のドキュメントは、こちら。
こんなときは、準拠している Protocol に着目してみると良さげなメソッドが見つかることもあります。
Array はさまざまな protocol に準拠しています。
関係ありそうな Protocol だけ抜粋してみても、Array は、Collection, RandomAccessCollection, Sequence と 複数あります。
Sequence タイプ
Sequence は、順序に沿ってアクセスできる Collection が準拠している Protocol です。
Apple のドキュメントは、こちら。
この Sequence に準拠していると、prefixというメソッドを使うと、もう少し綺麗に実装できそうです。
Apple のドキュメントは、こちら。
当初の先頭から最大 X 個を取得するというコードは以下となります。
let array = ...
array.prefix(3)
まとめ
配列(Array)の”先頭から最大” X 個取得する方法を説明してみました。
- Array の subscript でもできないことはないが、Array の大きさに気をつける必要がある
- Sequence の prefix が 先頭から最大 X 要素を取得するメソッド
- Tips: 使用クラスに良いメソッドがなくても、準拠している protocol を調べてみると良いこともある
説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。
SwiftUI おすすめ本
SwiftUI を理解するには、以下の本がおすすめです。
SwiftUI ViewMatery
SwiftUI で開発していくときに、ViewやLayoutのための適切なmodifierを探すのが大変です。
英語での説明になってしまいますが、以下の”SwiftUI Views Mastery Bundle”という本がビジュアル的に確認して探せるので、便利です。
英語ではありますが、1ページに コードと画面が並んでいるので、非常にわかりやすいです。
View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。
超便利です
販売元のページは、こちらです。
SwiftUI 徹底入門
# SwiftUI は、毎年大きく改善されていますので、少し古くなってしまいましたが、いまでも 定番本です。
Swift学習におすすめの本
詳解Swift
Swift の学習には、詳解 Swift という書籍が、おすすめです。
著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。
最新版を購入するのがおすすめです。
現時点では、上記の Swift 5 に対応した第5版が最新版です。
Sponsor Link