我有一个名为“Device”的核心数据实体,其中包含一个名为“asset_tag”的属性以及以下代码:
var endArray: [Device] = []
var request = NSFetchRequest<NSFetchRequestResult>()
request = Device.fetchRequest()
request.returnsObjectsAsFaults = false
endArray = try context.fetch(request) as! [Device]
print (endArray)
这打印出以下内容:
[<Device: 0x608000092c00> (entity: Device; id: 0xd000000000140000 <x-coredata://22AC91EB-92B1-4E5B-A5A9-A5924E0ADD3E/Device/p5> ; data: {
"asset_tag" = 26;
})]
我希望它打印出来的是['26']
答案 0 :(得分:1)
试试这样 - :
func loadData(){
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
do{
endArray = try context.fetch(request) as! [Device]
for data in 0..< endArray!.count{
if let value = endArray?[data].value(forKey: "Your Key") {
print(value)
}
}
}catch{
}
}
答案 1 :(得分:0)
您之所以这样,是因为endArray
是[Device]
,这意味着其中的每个条目都是Device
。打印数组时,得到的结果是在数组中的每个条目上调用debugDescription
。
如果您只想要数组中asset_tag
属性的整数值,则可以使用map
获取该数组:
let tagValues : [Int] = endArray.map { Int($0.asset_tag) }
这表示tagValues
的类型为[Int]
,并且您使用map
为endArray
中的每个条目获取一个值来分配值。通过在每个条目上查找asset_tag
的值来找到该值。结果是与Int
值对应的asset_tag
数组。
答案 2 :(得分:0)
首先,如果您使用NSManagedObject
子类,请使用特定的提取请求来避免类型转换。 NSFetchRequest
是引用类型。将请求声明为常量(let
)。
获取请求始终返回实体[NSManagedObject]
的数组。 垃圾非常重要。该对象可以包含许多属性和关系。
要获取特定属性的数组,请使用map
函数
var endArray = [Device]()
let request : NSFetchRequest<Device> = Device.fetchRequest()
request.returnsObjectsAsFaults = false
do {
endArray = try context.fetch(request)
let tagArray = endArray.map { $0.asset_tag }
print(tagArray)
} catch { print(error) }