如何快速打印数组中的对象值,而不是它的位置

我有一个课程,其中包含某些企业家的数据,并将其包含在同一个项目中的一个单独的swift文件中。

它看起来像这样:

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; } 

在同一个文件中,我有一个函数返回一个包含企业家类的实例的NSMutableArray ,如下所示:

 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) 

在我的ViewController.swift文件中,我创build了一个叫做企业家的常量,并给它一个上面创build的“企业家”类的types,并像这样初始化它:

 let entrepreneuerss:Entrepreneur = Entrepreneur() 

然后我访问一个类的方法,“populateArray”函数,并尝试打印这样的企业家数组:

  entrepreneuerss.populateArray() print (entrepreneuerss) 

问题是打印function是打印的对象的位置,而不是值…这样的事情:.Entrepreneur:0x7f88d0e3ecc0>“

我需要做什么,以便我可以返回对象值的数组而不是位置。 我想能够从我的ViewController.swift文件访问对象的数组,并随机select一个对象,并访问其属性。

首先,你有一个实例方法,返回一个Entrepreneur对象的数组(顺便说一下,我没有看到一个return ,也许你忘了复制它)。

这个方法应该是一个类方法,因为你不使用Entrepreneur对象的任何属性来返回它:

 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 } 

然后你可以通过调用你的数组:

 let array = Entrepreneur.populateArray() 

其次,在这个方法中,你创build一个Entrepreneur对象的数组并返回它,但是在你的示例代码中,你永远不会使用这个数组:

 // 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) 

相反,你应该使用类方法,并尝试:

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

为了对你的对象有一个详细的描述,因为它是从NSObjectinheritance的,所以只需重写description只读属性,以便在你logging对象时自定义文本:

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

这样你的打印function将会返回:

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

我需要做什么,以便我可以返回对象值的数组而不是位置。 我想能够从我的ViewController.swift文件访问对象的数组,并随机select一个对象,并访问其属性。

你已经拥有了从另一个快速文件中填充的企业家的所有对象。 你可以使用数组中的任何对象,并打印它的任何属性。

还是要打印所有对象的值或对象的所有属性,则需要在模型类中覆盖名为“description”的属性。

将以下代码添加到您的企业家类中

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

上面的代码将打印企业家的任何对象的名称和公司

尝试

 for element in array { print(element) }