LoginSignup
54
53

More than 5 years have passed since last update.

【Swift】enumerateを使ったときの値の受け取り方

Last updated at Posted at 2015-08-19

はじめに

【Swift】インデックス付きでmap, reduce, filterを使ってみる
Swift 2.0でのenumerateの使い方
の記事を上げる中で気づいたことがあったのでこれも記事にしようと思いました。

Swift 2.0で書きました。
Swift 3.0で書きました。(2016/09/28)

やること

map関数でインデックス(index)と要素(element)のペアを作る。


[1, 2, 3, 4] -> ["0:1", "1:2", "2:3", "3:4"]

方法一覧

詳しい書き方から順に紹介していきます。

値の受け取り方 その1

enumerateした結果、インデックスと要素のタプルで返ってきます。
タプル内のそれぞれの変数に、型付きで名前を付け、戻り値の型まで記述しました。


let array = [1, 2, 3, 4]
let pairList = array.enumerated().map { (tuple: (i: Int, ele: Int)) -> String in
    return "\(tuple.i):\(tuple.ele)"
}

値の受け取り方 その2

受け取る変数名だけ記述。
型推論により(Int, Int)型のタプルになります。


let array = [1, 2, 3, 4]
let pairList = array.enumerated().map { tuple in
    return "\(tuple.0):\(tuple.1)"
}

自動で(index: Int, element: Int)の名前付きタプルにもなりました。
Swift3では、自動で(offset: Int, element: Int)の名前付きタプルになりました。


let array = [1, 2, 3, 4]
let pairList = array.enumerated().map { tuple in
    return "\(tuple.offset):\(tuple.element)"
}

値の受け取り方 その3

タプル内のそれぞれの要素を型付きで直接取得します。


let array = [1, 2, 3, 4]
let pairList = array.enumerated().map { (i: Int, ele: Int) in
    return "\(i):\(ele)"
}

値の受け取り方 その4

タプル内のそれぞれの要素をそのまま取得します。


let array = [1, 2, 3, 4]
let pairList = array.enumerated().map { (i, ele) in
    return "\(i):\(ele)"
}

値の受け取り方 その5

変数の記述なし、returnもなし。
これでもちゃんと動きます。


let array = [1, 2, 3, 4]
let pairList = array.enumerated().map { "\($0.0):\($0.1)" }

おまけ

mapでの値の受け取り方を紹介しましたが、for文でも発見がありました。

for文 その1


for (i, ele) in [1, 2, 3, 4].enumerated() {
    print(i, ele)
}

ふつう

for文 その2


for tuple in [1, 2, 3, 4].enumerated() {
    print(tuple.offset, tuple.element)
}

この方法だと、自動で補完までしてくれました!!

Screen Shot 2016-09-28 at 3.14.16 PM.png

Screen Shot 2016-09-28 at 3.14.25 PM.png

おわり

54
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
53