回答:
メソッドがあります(実際には関数)
myArray.removeAll()
struct
sであり、構造体はを持つfunctions
クラスとは異なりますmethods
。
Array
sがstruct
sであることを忘れました。ベテランObjective-Cコーダーはこちら...
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)
}
これにより、削除された要素がまだ処理される要素の順序やインデックスを変更しないことが保証されます。
public extension Array where Element : Equatable { public mutating func remove(element: Element) -> Int { var occurrences = 0; for index in (0 ..< count).reverse() { if self[index] == element { removeAtIndex(index); occurrences += 1 } }; return occurrences } }
できればすべて1行ではなく使用しますが、そのコードは1行でコンパイルする必要があります
for _ in 0...<myArray.count { myArray.removeAtIndex(0) }
?効率についてはまだあまり詳しくありませんが、この方法では範囲を逆にする必要がないため、おそらくより高速です。
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)
count - 1
)。
あなたのコードは動くはずです、それはちょうど範囲外です。
スウィフト3
existingArray = []
これにより、空の配列を既存の配列に再度割り当て、データ型が参照されます。
または、を使用removeAll
して配列からすべての要素を削除し、既存の容量を維持するオプションを提供できます。
existingArray.removeAll()
これはmutating
、メソッドを呼び出す配列が変更される(空になる)ことを意味する関数です。
カイルは正しい軌道に乗っていますが、列挙中に可能なインデックスが減少し、違法なインデックスにつながるため、彼のコードは失敗します。
これを解決する1つの方法は、逆方向に列挙することです。迅速にこれはストライドを使用して行われます。
for index in stride(from: myArray.count - 1, through: 0, by: -1) {
myArray.removeAtIndex(index)
}
別のオプションは使用することです filter()
Swift 1.2
myArray = filter(myArray, { (obj) -> Bool in
return false
})
スウィフト2
myArray = myArray.filter{ (obj) -> Bool in
return false
}
stride
あり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拡張で使用可能なメソッドのリストを示しています
これを行うこともできます:
for _ in myArray
{
myArray.removeAtIndex(0)
}
ヴァディアンはあなたが達成しようとしていることに関して正しい答えを持っています。コードサンプルの結果として示された問題は、for
ループを作成しようとしている方法が原因です。Index
デフォルトでは0から始まります。forループを作成する正しい方法ではない後に数値範囲を追加する。そのため、エラーが表示されます。代わりに、次のようにforループを作成します。
for index in myArray.indices {
// Do stuff
}
うまくいけば、この回答がSwiftやプログラミングに不慣れな他の人を助けることでしょう。