software mac for descargar apple swift swift3

descargar - swift for mac download



El operador binario Swift 3.0 ''=='' no se puede aplicar (2)

Es un poco complicado, ya que no se pueden comparar directamente matrices o diccionarios (sin sobrecargar operadores).

Otro problema que podría enfrentar son las comparaciones opcionales y no opcionales, que se eliminaron en Swift 3 (¡ solo para < y > , == y != Todavía funcionan! ):

Swift Evolution - Propuesta # 0121

Lo que hice para hacerlo funcionar fue primero desenvolver el opcional con if let then luego los comparé con elementsEqual , primero el array, luego el diccionario.

let smth: [[String: AnyObject]] = [["key": "Value" as AnyObject]] let smth2: [[String: AnyObject]]? = nil if let smth2 = smth2, smth.elementsEqual(smth2, by: { (obj1, obj2) -> Bool in return obj1.elementsEqual(obj2) { (elt1, elt2) -> Bool in return elt1.key == elt2.key && elt1.value === elt2.value } }) { print("Equal") }

Otro problema es que, dado que está utilizando AnyObject como valor, no puede compararlos directamente. Es por eso que utilicé === que verifica si la referencia de comparar objetos es la misma. No estoy seguro de si esto es lo que quería.

En Swift 3.0 estoy obteniendo un extraño error cuando trato de comparar dos elementos que son del tipo [[String: AnyObject]] y [[String: AnyObject]]! . Entonces uno de ellos se desenrolla por la fuerza y ​​el otro no.

Entonces la comparación se ve así:

let smth: [[String: AnyObject]] = [["key": "Value"]] let smth2: [[String: AnyObject]]? = someFunctionThatReturnsAnOptionalArrayOfDictionaries() if smth == smth2! { print("Equal") }

El error dice: Binary operator ''=='' cannot be applied to operands of type ''[[String : AnyObject]]'' and ''[[String : AnyObject]]!''

¿Cuál es la forma correcta de hacer esto en Swift 3?


Esta respuesta SO incluye una solución a este problema bajo el subtítulo ''Xcode 8 beta 6''. Swift 3 ''.

Nota en particular:

En el ejemplo anterior, todas las claves y valores del diccionario son del mismo tipo. Si intentamos comparar dos diccionarios de tipo [String: Any], Xcode se quejará de que el operador binario == no se puede aplicar a dos operandos [String: Any]. ... Pero podemos ampliar la funcionalidad del operador == utilizando el inicializador NSDictionary: