我有一个类,其中包含某些企业家的数据,这些数据库位于同一项目中的单独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文件中,我创建了一个名为"企业家"的常量,并为其提供了上面创建的"企业家"类,并将其初始化为:
let entrepreneuerss:Entrepreneur = Entrepreneur()
然后我访问一个类方法,"populateArray"函数,并尝试打印企业家数组,如下所示:
entrepreneuerss.populateArray() print (entrepreneuerss)
问题是打印功能是打印对象的位置而不是值......如下所示:.Entrepreneur:0x7f88d0e3ecc0>"
我需要做什么才能返回对象值的数组而不是位置.我希望能够从我的ViewController.swift文件访问对象数组,并随机选择一个对象并访问其属性.
首先,你有一个实例方法,它返回一个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()
其次,在此方法中,您创建一个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)
为了获得对象的详细描述,因为它继承自NSObject
,只需覆盖description
只读属性,以便在您记录对象时自定义文本:
override var description : String { get { return "Entrepreneur : name : `\(name) - company : `\(company)` - summary : `\(summary)` - age : `\(age)`" } }
因此您的打印功能将返回:
[Entrepreneur : name : `Optional("Mark Zuckerberg") - company : `Optional("Facebook")` - summary : `[""]` - age : `Optional(19)`]