2017-07-10 98 views
4

我想在Shinobi DataGrid中實現多次單擊。我有一個網格有陣列Swift 3:刪除未知索引數組中的值

(["1", "32", and more]) 

如果我點擊網格我把它放到新的數組self.arrayNr.append(currNr)

但我想檢查並刪除,如果currNr已經存在於arrayNr它將被從arrayNr中刪除。

我是新來的,使用Swift 3.我讀了一些與我的問題有關的問題,如thisthis,但它不起作用。我認爲Swift 2在處理String時比Swift 3簡單。任何訴求或答案都會對我有幫助?

回答

2

您可以使用index(of來檢查數組中是否存在currNr。 (類必須符合Equatable協議)

var arrayNr = ["1", "32", "100"] 
let currNr = "32" 
// Check to remove the existing element 
if let index = arrayNr.index(of: currNr) { 
    arrayNr.remove(at: index) 
} 
arrayNr.append(currNr) 
+0

感謝您的建議,但這裏沒有'index(of:)'的參數。它應該是什麼? –

+0

再次看看我的示例,您會看到它是* currNr *字符串的索引。 – Lawliet

+1

'index(of:)'只存在符合'Equatable'的對象https://developer.apple.com/documentation/swift/equatable – iwasrobbed

1

假設有字符串的數組,即鍵入[String]。現在你想刪除一個字符串,如果它存在。所以,你只需要

stringArray= stringArray.filter(){$0 != "theValueThatYouDontWant"} 

例如,你有數組這樣的陣列由這一行代碼過濾和要刪除「1」

let array = ["1", "32"] 

直接讓

array = array.filter(){$0 != "1"} 
1

長期解決方案

sampleArray迭代自身並在退出循環之前刪除正在查找的值(如果它存在)。

var sampleArray = ["Hello", "World", "1", "Again", "5"] 
let valueToCheck = "World" 

for (index, value) in sampleArray.enumerated() { 
    if value == valueToCheck && sampleArray.contains(valueToCheck) { 
     sampleArray.remove(at: index) 
     break 
    } 
} 

print(sampleArray) // Returns ["Hello", "1", "Again", "5"] 

簡短的解決方案

sampleArray返回不等於你正在檢查的所有數值的數組。

var sampleArray = ["Hello", "World", "1", "Again", "5"] 
let valueToCheck = "World" 

sampleArray = sampleArray.filter { $0 != valueToCheck } 

print(sampleArray) // Returns ["Hello", "1", "Again", "5"]