He encontrado el .contiene(Elemento) método bastante esencial en mi experiencia mínima de escritura de código Swift, y se han dado cuenta rápidamente de que Apple cambió…

func contains(check:[[[Int]]], forElement: [[Int]]) -> Bool {
    for element in check {
        if areEqual(element, forElement) {
            return true
        }
    }
    return false
}
func areEqual(_ a:[[Int]], _ b:[[Int]]) -> Bool {
    for i in 0..<a.count {
        if a[i] != b[i] {
            return false
        }
    }
    return true
}

He estado jugando con algunos de los grandes matrices, por lo que he solucionado mi problema con el que torpe función.

¿Qué pasó?

¿Cómo se utiliza la nueva forma?

El ejemplo está bien por encima de mi cabeza y estoy seguro de que la intención de que lo sea.

enum HTTPResponse {
    case ok
    case error(Int)
}

let lastThreeResponses: [HTTPResponse] = [.ok, .ok, .error(404)]
let hadError = lastThreeResponses.contains { element in
    if case .error = element {
        return true
    } else {
        return false
    }
}
// 'hadError' == true
  • ¿Qué tipo de valores en la matriz que está tratando de llamar contains en? Puedes mostrar el código de cómo se está tratando de utilizar contains?
  • En realidad contains(where: está disponible en Swift 3, también.
  • No estoy al tanto de cualquier cambio hecho a contains(_:) o contains(where:) en Swift 4 – ¿cómo se puede expandir en qué crees que ha cambiado? [[Int]] no es Equatable porque no tenemos condicional conformidades, sin embargo – por lo que debe utilizar contains(where:) con una sobrecarga de == para las matrices anidadas, comparar stackoverflow.com/q/33377761/2976878 para definir eso.
InformationsquelleAutor bearacuda13 | 2017-06-12

2 Comentarios

  1. 27

    Cómo sobre el uso de este

    let numbers = [1, 2, 3, 4]
    let contains = numbers.contains(where: { $0 == 3 })
    //contains == true

    O

    let strings = ["A", "B", "C", "D"]
    let contains = strings.contains(where: { $0 == "B" })
    //contains == true

    Incluso con otros objetos como NSColor

    let colors: [NSColor] = [.red, .blue, .green]
    contains = colors.contains(where: { $0 == .red })
    //contains == true
    • no válido solución.
    • esto funciona para mí, te importa a elaborar?
  2. 3

    Que la API sólo permite pasar de un bloque donde se pueden realizar todas las comprobaciones que usted desea. Usted puede comprobar si el elemento es igual a algo, o si sus propiedades satisfacer algunas restricciones (como en el ejemplo de la documentación). Usted debe ser capaz de realizar una igualdad básica comprobar como esta:

    func contains(check:[[[Int]]], forElement: [[Int]]) -> Bool {
        return check.contains { element in
            return areEqual(element, forElement)
        }
    }
    
    func areEqual(_ a:[[Int]], _ b:[[Int]]) -> Bool {
        for i in 0..<a.count {
            if a[i] != b[i] {
                return false
            }
        }
        return true
    }

    Contiene el bloque recorre cada elemento y devuelve true o false. En el final, una sola true para cualquier elemento volverá true para toda la función.

    • fija la llave de cierre. Se olvidó de las matrices anidadas parte, la adopción de un vistazo.
    • He modificado el código para utilizar el areEqualfunción en la pregunta ya que @Hamish señaló, no hay ninguna integrada en la sobrecarga de las matrices anidadas.

Dejar respuesta

Please enter your comment!
Please enter your name here