Cómo copiar un «Diccionario» de Swift?

Cómo copiar un «Diccionario» en Swift?

Es decir, conseguir otro objeto con las mismas claves/valores, pero en diferentes direcciones de memoria.

Además, cómo copiar un objeto en Swift?

Gracias,

InformationsquelleAutor allenlinli | 2014-07-18

3 Kommentare

  1. 69

    Un ‘Diccionario’ es en realidad una Estructura de swift, que es un tipo de valor. Así que la copia es tan fácil como:

    let myDictionary = ...
    let copyOfMyDictionary = myDictionary

    Para copiar un objeto (que es un tipo de referencia) tiene un par de respuestas diferentes. Si el objeto adopta la NSCopying protocolo, entonces usted puede hacer:

    let myObject = ...
    let copyOfMyObject = myObject.copy()

    Si el objeto no se ajustan a NSCopying entonces usted no puede ser capaz de copiar el objeto. Dependiendo de la clase del objeto puede proporcionar su propio método para obtener una copia duplicada, o si el objeto no tiene ningún privada interna del estado, a continuación, puede crear un nuevo objeto con las mismas propiedades.

    [Editado para corregir un error en la respuesta anterior – NSObject (tanto de la Clase y el Protocolo) no proporcionar una copia o copyWithZone método y por lo tanto no es suficiente para ser capaz de copiar un objeto]

  2. 7

    Todas las respuestas que se dan aquí son grandes, pero no perder un punto clave respecto a la advertencia acerca de las advertencias de la copia.

    De Swift, usted tiene cualquiera de los tipos de valor (estructura, enumeración, tupla, matriz, dict etc) o tipos de referencia (clases).

    Si usted necesita una copia de un objeto de la clase, a continuación, usted tiene que implementar los métodos copyWithZone en su clase y, a continuación, llamar a copiar en el objeto.

    Pero si usted necesita copiar un valor de tipo de objeto, por ejemplo. y la Matriz se puede copiar directamente por acaba de asignar a una variable así:

    let myArray = ...
    let copyOfMyArray = myArray

    Pero esto es sólo superficial copia.

    Si la matriz contiene los objetos de la clase y de la que desea hacer una copia así, a continuación, tendrá que copiar cada elemento de la matriz de forma individual. Esto le permitirá hacer un copia profunda.

    Esta es la información adicional, que yo pensaba que iba a añadir a la información ya presentada en el bien escrito respuestas anteriores.

    • Le he preguntado sobre esto en mi otro ST pregunta :).
  3. 2

    Objeto

    class Person: NSObject, NSCopying {
        var firstName: String
        var lastName: String
        var age: Int
    
        init(firstName: String, lastName: String, age: Int) {
            self.firstName = firstName
            self.lastName = lastName
            self.age = age
        }
    
        func copyWithZone(zone: NSZone) -> AnyObject {
            let copy = Person(firstName: firstName, lastName: lastName, age: age)
            return copy
        }
    }

    Uso

    let paul = Person(firstName: "Paul", lastName: "Hudson", age: 35)
    let sophie = paul.copy() as! Person
    
    sophie.firstName = "Sophie"
    sophie.age = 5
    
    print("\(paul.firstName) \(paul.lastName) is \(paul.age)")
    print("\(sophie.firstName) \(sophie.lastName) is \(sophie.age)")

    Fuente: https://www.hackingwithswift.com/example-code/system/how-to-copy-objects-in-swift-using-copy

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea