다음과 같이 for 루프를 사용하여 모든 배열 요소를 삭제하려고합니다.
for index 1...myArray.count {
myArray.removeAtIndex(index)
}
하지만 작동하지 않습니다. bulding 전에이 오류가 발생합니다.
‘;’가 필요합니다. ‘for’문에서
답변
방법이 있습니다 (실제로는 기능)
myArray.removeAll()
답변
@vadian의 대답 이 해결책 이라는 것을 당연하게 생각하면 코드가 작동하지 않는다는 점을 지적하고 싶습니다.
우선 배열 인덱스는 0부터 시작하므로 그에 따라 범위를 다시 작성해야합니다.
for index 0..<myArray.count {
myArray.removeAtIndex(index)
}
그러나이 구현은 충돌을 일으킬 것입니다. 10 개 요소의 배열이있는 경우 마지막 요소는 인덱스 9의 위치를 차지합니다.
이 루프를 사용하면 첫 번째 반복에서 인덱스 0의 요소가 제거되고 마지막 요소가 인덱스 8에서 아래로 이동합니다.
다음 반복에서 인덱스 1의 요소가 제거되고 마지막 요소는 인덱스 7에서 아래로 이동합니다.
루프의 어느 시점에서 존재하지 않는 인덱스에 대한 요소를 제거하려고하면 앱이 중단됩니다.
루프의 배열에서 요소를 제거 할 때 가장 좋은 방법은 역순으로 순회하는 것입니다.
for index in reverse(0..<myArray.count) {
myArray.removeAtIndex(index)
}
이렇게하면 제거 된 요소가 처리 될 요소의 순서 나 색인이 변경되지 않습니다.
답변
in
오류를 일으키는 키워드 가 없습니다 . 코드는 다음과 같아야합니다.
for index in 1...myArray.count {
myArray.removeAtIndex(index)
}
그러나 다음과 같은 몇 가지 이유로 예상대로 작동하지 않습니다.
- 마지막으로 유효한 지수는
count - 1
요구되는1..<myArray.count
- 더 중요한 것은 배열에서 요소를 제거하면 길이가 줄어들어 매번 인덱스가 변경됩니다.
배열에서 모든 것을 제거하려는 경우 다른 사람들이 제안하고 사용하는대로 수행해야합니다.
myArray.removeAll()
첫 번째 요소 만 원하는 경우 첫 번째 개체에 대한 참조를 가져올 수있는 경우 배열을 비운 다음 개체를 다시 추가합니다.
var firstElement = myArray.first!
myArray.removeAll()
myArray.append(firstElement)
답변
정말로 어레이를 지우고 싶다면 가장 간단한 방법은 다시 초기화하는 것입니다.
답변
코드가 작동해야하며 범위를 벗어났습니다.
스위프트 3
existingArray = []
이렇게하면 기존 배열에 빈 배열을 다시 할당하고 데이터 유형이 참조됩니다.
또는 removeAll
어레이에서 모든 요소를 제거하고 기존 용량을 유지하는 옵션을 제공하는 방법을 사용할 수 있습니다.
existingArray.removeAll()
mutating
메서드를 호출하는 배열이 변경 (비어 있음)을 의미 하는 함수입니다.
답변
Kyle은 올바른 길을 가고 있지만 열거하는 동안 가능한 인덱스가 줄어들어 불법 인덱스로 이어 지므로 코드가 실패합니다.
그것을 해결하는 한 가지 방법은 거꾸로 열거하는 것입니다. 신속하게 이것은 strides 를 사용하여 수행됩니다 .
for index in stride(from: myArray.count - 1, through: 0, by: -1) {
myArray.removeAtIndex(index)
}
다른 옵션은 사용하는 것입니다 filter()
스위프트 1.2
myArray = filter(myArray, { (obj) -> Bool in
return false
})
스위프트 2
myArray = myArray.filter{ (obj) -> Bool in
return false
}
답변
이 removeAllObjects () 스위프트 2에서 사용할 수있는 방법은
Syntax : public func removeAllObjects()
Eg.: mainArray.removeAllObjects
특정 인덱스에서 요소를 제거하려면 다음을 사용하십시오.
Syntax : public func removeObjectAtIndex(index: Int)
Eg.: mainArray.removeObjectAtIndex(5)
마지막 요소 사용을 제거하려면 다음을 수행하십시오.
Syntax : public func removeLastObject()
Eg.: mainArray.removeLastObject()
특정 범위의 요소를 제거하려면 다음을 사용하십시오.
Syntax : public func removeObject(anObject: AnyObject, inRange range: NSRange)
특정 요소 사용을 제거하려면 다음을 수행하십시오.
Syntax : public func removeObject(anObject: AnyObject)
아래 스크린 샷은 NSMutableArray 확장에서 사용 가능한 메소드 목록을 보여줍니다.