2015-06-05 8 views
12
class book{ 
    var nameOfBook: String! 
} 

var englishBooks=[book(),book(),book()] 
var arr = englishBooks.filter { 
    contains($0.nameOfBook, "rt") 
} 

मैं इस फिल्टर लेकिन त्रुटि के साथ उपयोग कर रहा हूँ एक तर्क के साथ फिल्टर आह्वान नहीं कर सकतेवस्तुओं

उत्तर

27

जांच करता है कि एक दृश्य एक दिया तत्व शामिल करें, उदा स्विफ्ट फ़िल्टर सारणी यदि String में Character दिया गया है।

आपका इरादा सभी पुस्तकों जहां नाम सबस्ट्रिंग "आरटी" शामिल मिल रहा है, तो आप rangeOfString() उपयोग कर सकते हैं:

var arr = englishBooks.filter { 
    $0.nameOfBook.rangeOfString("rt") != nil 
} 

या केस-संवेदी तुलना के लिए:

var arr = englishBooks.filter { 
    $0.nameOfBook.rangeOfString("rt", options: .CaseInsensitiveSearch) != nil 
} 

स्विफ्ट 2, के रूप में आप

का उपयोग कर सकते हैं 10

और में स्विफ्ट 3 इस

nameOfBook.contains("rt") // or 
nameOfBook.localizedStandardContains("rt") // or 
nameOfBook.range(of: "rt", options: .caseInsensitive) != nil 
5

क्षमा है यह कोई पुराना धागा है। अपने चर 'nameOfBook' को ठीक से व्यवस्थित करने के लिए आपको थोड़ा कोड बदलें।

class book{ 
    var nameOfBook: String! 
    init(name: String) { 
     nameOfBook = name 
    } 
} 

फिर हम पुस्तकों की एक श्रृंखला बना सकते हैं।

var englishBooks = [book(name: "Big Nose"), book(name: "English Future 
Prime Minister"), book(name: "Phenomenon")] 

सरणी की 'फिल्टर' समारोह एक तर्क और कुछ लॉजिक्स लेता है, 'शामिल' समारोह एक स्ट्रिंग आप खोज रहे हैं का एक सरलतम रूप ले सकता है।

let list1 = englishBooks.filter { (name) -> Bool in 
    name.contains("English") 
} 

फिर आप बाहर List1 तो जैसे मुद्रित कर सकते हैं:

let list2 = arr1.map({ (book) -> String in 
    return book.nameOfBook 
}) 
print(list2) 

// print ["English Future Prime Minister"] 

दो स्निपेट से ऊपर तो जैसे छोटे हाथ लिखा जा सकता है:

let list3 = englishBooks.filter{ ($0.nameOfBook.contains("English")) } 
print(list3.map({"\($0.nameOfBook!)"}))