써니쿠키의 IOS 개발일기

[swift] enumerated(), forEach() 본문

swift, Ios

[swift] enumerated(), forEach()

sunnyCookie 2022. 8. 23. 11:45
  • 어쩌다가 알게되었나?
     본래 set타입에는 순서가 없지만 set 타입에 담긴 멤버들에게 임시적으로 순서를 부여했어야 했다..!

1. enumerated()

공식문서에서의 정의

enumerated()메서드를 사용하면 (n,x)쌍의 시퀀스로 리턴해준다
n = 0부터 시작하는 연속정수
x = 시퀀스의 요소를 나타내는 것

//예시(String)
for (n, x) in "Sun".enumerated() {
print("\(n): '\(x)'")
}
// Prints "0: 'S'" // 0부터 시작된다
// Prints "1: 'u'"
// Prints "2: 'n'"

컬렉션 타입에서의 사용

  1. array 타입
    리턴되는 n값이 index와 같음을 이용 할 수 있다.
  2. 그 외 다른 컬렉션 타입(dictionaty와 set 등)
    인덱스로 쓸 수 없는 타입이거나 n이 범위를 벗어날 수 도있다.

컬렉션 요소를 반복하려면 zip(*:*:) 함수를 사용할 수 있다.

//예제(Set)
let names: Set = ["Sunny", "Ash", "Bame2", "Jpush", "LJ"]

for (i, x) in names.enumerated() {
    print(i ,x)
}

// ✔️순서는 빌드시마다 변함! (set이므로)
// 0 Jpush
// 1 LJ
// 2 Bame2
// 3 Sunny
// 4 Ash

Set타입 사용 시 value에 잠시 순서를 부여하고싶을 때 사용하면 좋을 듯하다!


2. foreach()

공식문서에서의 정의

for-in 루프와 동일한 순서로 시퀀스의 각 요소에 대해 불러옵니다.

  • forEachfor-in 루프 와 다른점
    1. Break 또는 Continue 문을 사용불가능
    2. return사용 외부 scope가 아닌 현재 현재 호출에서만 종료되고 이후 호출은 건너뛰지않음.
//정의
func forEach(_ body: (Self.Element) throws -> Void) rethrows

//예시
let names2: Array<String> = ["Sunny", "Ash", "Bame2", "Jpush", "LJ"]

//for - in 루프 사용
for name in names2 {
    print(name)
}
// Sunny
// Ash
// Bame2
// Jpush
// LJ

//foreach 메서드 사용
names2.forEach { name in
    print(name)
}
//위와 동일하다
// Sunny
// Ash
// Bame2
// Jpush
// LJ

반복문을 좀 더 간결하게 작성하고 싶을 때 사용하면 좋을 것 같다.
다만 for-in구문과의 차이를 알고써야겠다

반응형
Comments