gpt4 book ai didi

ios - 快速判断可选值不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 06:38:37 24 4
gpt4 key购买 nike

我尝试预测可选值,但它总是使应用程序崩溃并出现以下错误。

* Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ valueForUndefinedKey:]: this class is not key value coding-compliant for the key q_id.' * First throw call stack:

虽然模型中有变量定义但是它是这样定义的

var q_id : Int!

如果我在解包中转换这个变量,它工作正常

var q_id = Int()

那么有没有其他的方式来判断可选值呢?

let Qid = dictData.objectForKey("q_id") as? String
let fQuesID : Int = Int(Qid!)!;

let predicate = NSPredicate(format: "SELF.q_id == %i",fQuesID)
let arrObj : NSArray = arrData.filteredArrayUsingPredicate(predicate) ;
//arrData.filter { predicate.evaluateWithObject($0) }
if(arrObj.count > 0)
{
let objPostModel : ViewPostModel = arrObj.firstObject as! ViewPostModel;
objPostModel.isPollExpired = 1; // 1 Means Poll Expired!
self.tblViewPost?.reloadData();
}

它只发生在原始可选类型变量(int、float 等...)

更新:如果您使原始类型成为非可选类型,那么它就可以正常工作

最佳答案

我假设 dictData 是一个 NSDictionary 包含键“q_id”的 String 值, arrData 是一个 NSArray,它只包含 ViewPostModel。而在 ViewPostModel 类中,q_idInt? 类型的属性。

有了所有这些,您可以用更 Swifty 的方式编写代码:

    if let
qId = dictData["q_id"] as? String,
fQuesID = Int(qId)
{
let arrObj = (arrData as! [ViewPostModel]).filter{$0.q_id == fQuesID}
if let objPostModel = arrObj.first {
objPostModel.isPollExpired = 1 // 1 Means Poll Expired!
self.tblViewPost?.reloadData()
}
} else {
print("invalid q_id in dictData")
}

(通过将 arrData 声明为 [ViewPostModel],您将无需使用危险的 as! 运算符。您可以制作一些其他部分更 Swifty。)

通常,如果您只使用 NSPredicate 来过滤数组,最好使用 Swift filter 方法和闭包。

关于ios - 快速判断可选值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38388875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com