Question Tableaux rapides et contient, comment déterminer si une collection contient un objet ou une valeur?


Je suis à nouveau avec les tableaux rapides et contientObject fourni par NSArray seulement!

Je relie le tableau swift à NSArray à faire qui contient:

extension Array {
    func contains(object:AnyObject!) -> Bool {
        if(self.isEmpty) {
            return false
        }
        let array: NSArray = self.bridgeToObjectiveC();
        return array.containsObject(object)
    }
}

ça marche bien en général mais dès que je mets un string! dans un tableau de type String, il se bloque. Même si containsObject prend un AnyObject!

        var str : String! = "bla"
        var c = Array<String>();
        c.append(str)
        println(c.contains(str))

déclarer une chaîne! tableau aussi n'aide pas

        var str : String! = "bla"
        var c = Array<String!>();
        c.append(str)
        println(c.contains(str))

MAIS le même sans ! fonctionne bien

        var str : String = "bla"
        var c = Array<String>();
        c.append(str)
        println(c.contains(str))

Alors comment puis-je emballer explicitement des choses? Je ne vois pas vraiment pourquoi je devrais l'envelopper explicitement pour qu'il soit correctement déballé, mais à quoi cela ressemble.


30
2018-06-04 12:39


origine


Réponses:


Swift 1:

let array = ["1", "2", "3"]
let contained = contains(array, "2")
println(contained ? "yes" : "no")

Swift 2, 3, 4:

let array = ["1", "2", "3"]
let contained = array.contains("2")
print(contained ? "yes" : "no")

74
2018-06-05 17:19



Rapide

Si vous n'utilisez pas d'objet, vous pouvez utiliser ce code pour contient.

let elements = [ 10, 20, 30, 40, 50]

if elements.contains(50) {

   print("true")

}

Si vous utilisez NSObject Class dans swift. Cette variable est selon mes besoins. vous pouvez modifier pour votre exigence.

var cliectScreenList = [ATModelLeadInfo]()
var cliectScreenSelectedObject: ATModelLeadInfo!

Ceci est pour un même type de données.

{ $0.user_id == cliectScreenSelectedObject.user_id }

Si vous voulez le type AnyObject.

{ "\($0.user_id)" == "\(cliectScreenSelectedObject.user_id)" }

Condition complète

if cliectScreenSelected.contains( { $0.user_id == cliectScreenSelectedObject.user_id } ) == false {

cliectScreenSelected.append(cliectScreenSelectedObject)

print("Object Added")

} else {

print("Object already exists")

}

2
2017-08-02 12:56