我试图在null
开始时从核心数据中的一个属性中检索除viewController
之外的所有值。但是在for
循环期间,no
始终取值0并且不会提前递增。所以我的results.count
是8,然后它显示0 8次,并为该属性获取相同的值。
func searchMark() -> Int
{
do
{
let mngdCntxt = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "AddedBookmark")
let results = try mngdCntxt.fetch(fetchRequest)
//fetchRequest.returnsObjectsAsFaults = false
for no in 0..<results.count{
if let match = results[no] as? AddedBookmark
{
print(no)
let providerNo = match.value(forKey: "providerNo") as! Int
print("providerNo: \(providerNo)")
return providerNo
}
}
catch{}
return 0
}
通过providerNo
循环获取for
的值。
答案 0 :(得分:1)
你回来太快,所以循环甚至没有递增一次(这也是no == results.count
时循环不会崩溃的原因:
func searchMark() -> Int {
var output = 0
do {
let mngdCntxt = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "AddedBookmark")
let results = try mngdCntxt.fetch(fetchRequest)
for no in 0...(results.count-1) {
if let match = results[no] as? AddedBookmark {
print(no)
let providerNo = match.value(forKey: "providerNo") as! Int
print("providerNo: \(providerNo)")
output = providerNo
}
}
return output
}
catch{}
return output
}
此功能可能与您的预期完全不同,但它会显示循环应该有多大以及何时返回
答案 1 :(得分:0)
如果你
尝试从一个属性中检索除
null
之外的所有值
这意味着您实际上想要返回Int
数组,并且您的强制解包属性意味着该属性被声明为非可选属性。根据这两个假设null
意味着0
逻辑结论是指定谓词以返回providerNo != 0
的所有记录,将项目映射到providerNo
值并返回该值。
func searchMark() -> [Int]
{
do {
let mngdCntxt = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "AddedBookmark")
fetchRequest.predicate = NSPredicate(format: "providerNo != 0")
let results = try mngdCntxt.fetch(fetchRequest) as! [AddedBookmark]
return results.map{ Int($0.providerNo) }
}
catch {
print(error)
return [Int]()
}
}