当前位置:  开发笔记 > IOS > 正文

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

如何解决《如何在swift中打印数组中的对象值,而不是它的位置》经验,为你挑选了1个好方法。

我有一个类,其中包含某些企业家的数据,这些数据库位于同一项目中的单独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文件访问对象数组,并随机选择一个对象并访问其属性.



1> Michaël Azev..:

首先,你有一个实例方法,它返回一个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)`]

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有