Cómo imprimir el valor del object en una matriz en swift, no en su location

Tengo una class que contiene información sobre ciertos empresarios en un file Swift separado que se encuentra dentro del mismo proyecto.

Se parece a esto:

class Entrepreneur:NSObject { var name:String? var netWorth = (0.0, "") var company:String? var summary: [String] var age: Int? override init() { name = "" company = "" summary = [""] age = 1; } 

En el mismo file tengo una function que devuelve un NSMutableArray que contiene las instancias de la class de emprendedor así:

 func populateArray() -> NSMutableArray { var entreprenuersArray: NSMutableArray = [] //Mark Zuckerberg let markZuckerBerg = Entrepreneur() markZuckerBerg.name = "Mark Zuckerberg" markZuckerBerg.age = 19 markZuckerBerg.company = "Facebook" markZuckerBerg.netWorth = (35.7, "Billion") // add mark zuckerberg object to array entreprenuersArray.addObject(markZuckerBerg) print (entreprenuersArray) 

en mi file ViewController.swift , creo una constante llamada entrepreneurss y le doy un tipo de la class "Entrepreneur" creada anteriormente y la inicializo así:

 let entrepreneuerss:Entrepreneur = Entrepreneur() 

Luego accedo a uno de los methods de la class, la function "populateArray" e bash imprimir la matriz de empresarios como tal:

  entrepreneuerss.populateArray() print (entrepreneuerss) 

El problema es que la function de printing está imprimiendo la location del object y no el valor … algo así: .Empresario: 0x7f88d0e3ecc0> "

¿Qué debo hacer para poder devolver una matriz de valores de object y no la location? Quiero poder acceder a la matriz de objects desde mi file ViewController.swift y seleccionar aleatoriamente un object y acceder a sus properties.

Primero, tienes un método de instancia que devuelve una matriz de objects Entrepreneur (por cierto, no veo una return , tal vez te olvidaste copyrla).

Este método debería ser un método de class, ya que no utiliza ninguna propiedad del object Entrepreneur que la devuelva:

 class func populateArray() -> [Entrepreneur] { var entreprenuersArray:[Entrepreneur] = [] //Mark Zuckerberg let markZuckerBerg = Entrepreneur() markZuckerBerg.name = "Mark Zuckerberg" markZuckerBerg.age = 19 markZuckerBerg.company = "Facebook" markZuckerBerg.netWorth = (35.7, "Billion") // add mark zuckerberg object to array entreprenuersArray.append(markZuckerBerg) print (entreprenuersArray) return entreprenuersArray } 

Entonces puede tener su matriz llamando al:

 let array = Entrepreneur.populateArray() 

En segundo lugar, en este método, crea una matriz de object Entrepreneur y la devuelve, pero en su código de ejemplo, nunca usa esta matriz:

 // Creates a Entrepreneur object with default values let entrepreneuerss:Entrepreneur = Entrepreneur() // create an array of entrepreneurs objects, returns it, but never use it entrepreneuerss.populateArray() // print some information about the object with default values print (entrepreneurs) 

En su lugar, debe usar el método de class y probar:

 // create an array of entrepreneurs objects, returns it, let arrayEntrepreneurs = Entrepreneur.populateArray() // print some information about the array of Entrepreneurs objects print (arrayEntrepreneurs) 

Para tener una descripción detallada de su object, ya que henetworkinga de NSObject , solo anule la propiedad de solo lectura de description para personalizar el text cuando registra su object:

 override var description : String { get { return "Entrepreneur : name : `\(name) - company : `\(company)` - summary : `\(summary)` - age : `\(age)`" } } 

Por lo tanto, su function de printing regresará:

 [Entrepreneur : name : `Optional("Mark Zuckerberg") - company : `Optional("Facebook")` - summary : `[""]` - age : `Optional(19)`] 

¿Qué debo hacer para poder devolver una matriz de valores de object y no la location? Quiero poder acceder a la matriz de objects desde mi file ViewController.swift y seleccionar aleatoriamente un object y acceder a sus properties.

Ya tiene todos los objects de los empresarios que se encuentran en su otro file rápido. puede usar cualquier object de la matriz e imprimir cualquier propiedad.

Aún así, desea imprimir el valor de todos los objects o todas las properties de un object, entonces debe anular la propiedad llamada "descripción" en su class model.

agregue el siguiente código a su class de Emprendedor

override var description:String { return "name :\(self.name) \n company \(self.company)" }

El código anterior imprimirá el nombre y la compañía de cualquier object de Emprendedor

tratar

 for element in array { print(element) }