我有一个名为"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']
尝试这样:
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{
}
}
你得到它是因为endArray
是一个[Device]
,这意味着它中的每个条目都是一个Device
。打印数组时,得到的是对数组中的每个条目调用debugDescription
的结果。
如果您只想要数组中 asset_tag
属性的整数值,则可以使用 map
获取该数组:
let tagValues : [Int] = endArray.map { Int($0.asset_tag) }
这表示tagValues
具有类型 [Int]
,并且您正在使用 map
为endArray
中的每个条目获取一个值来分配一个值。该值是通过查找每个条目上的asset_tag
值来找到的。结果是一个对应于asset_tag
值的Int
数组。
如果您使用的是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) }