Swift在数组中使用自定义类型,但始终打印类型名称而不是值

时间:2019-06-14 05:14:37

标签: swift

我有一个调用API的函数。 当我拨打指定的钥匙时,它将给我清单 把它保存到我的数组中

var car = [Car]()

我使用for循环来获取键的值

for result in fromApiResult.designatedKey {
       self.car.append(Car(carName: result.Name, carType: result.Type))
    }

然后我打印出汽车,看起来就像Type

print("\(car)") // [Car,Car]

那不是我想要的,我实际上希望它看起来像下面的

因为我将使用这些数据在TableView上显示

var car = [Car(carName:"BMW",carType:"SUV")]

但是如果我再次使用for循环,它可以获得正确的值

 for result in car {
   print(result.carName) //"BMW"
 }

我真的很新,现在擅长提问 如果需要更多信息,请问我,谢谢。

1 个答案:

答案 0 :(得分:1)

考虑以下示例,我发现了HERE

首先,您需要创建名为CustomStringConvertible的扩展名

extension CustomStringConvertible {
    var description: String {
        var description: String = "\(type(of: self))("

        let selfMirror = Mirror(reflecting: self)

        for child in selfMirror.children {
            if let propertyName = child.label {
                description += "\(propertyName): \(child.value), "
            }
        }

        description += "<\(Unmanaged.passUnretained(self as AnyObject).toOpaque())>)"

        return description
    }
}

然后您的班级需要确认该扩展名,例如:

class Person: CustomStringConvertible {
    let name: String
    let age: Int

    init (name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

现在您可以在控制台中打印对象,如:

let alex = Person(name: "Alex", age: 20)
print(alex) // Person(name: Alex, age: 20, <0x000060c000058d20>)

有关更多信息,请阅读HERE