在 swiftyJSON 上使用“if let”会使我的核心数据分配出错
Posted
技术标签:
【中文标题】在 swiftyJSON 上使用“if let”会使我的核心数据分配出错【英文标题】:Using "if let" on swiftyJSON makes my coredata assignment go awry 【发布时间】:2016-07-11 16:40:52 【问题描述】:我有一些我正在处理 swiftyJSON 的 JSON 数据。我将其放入核心数据中。如果所有字段都在那里,它可以正常工作,但有些字段是空的,我正在尝试“保护”免受空字段的影响。
如果填充了所有字段,以下是可以正常工作的代码部分:
// Iterate through each item in the JSON
for (_,subJson) in readableJSON[]["data"]
let title = subJson["title"].string!
let url_title = subJson["url_title"].string!
let entry_id = subJson["entry_id"].string!
let newPet: NSManagedObject = NSEntityDescription.insertNewObjectForEntityForName("Pets", inManagedObjectContext: context)
// Store the data in CoreData "Pets"
newPet.setValue(self.title, forKey: "title")
newPet.setValue(url_title, forKey: "url_title")
newPet.setValue(entry_id, forKey: "entry_id")
// end of "for items in JSON struck
但是,为了防止出现空字段,我尝试对 JSON 迭代执行此操作:
if let entry_id = subJson["entry_id"].string
但是当我这样做时,newPet.setValue
会抛出这个错误:
使用未解析的标识符“entry_id”
在这种情况下,我知道entry_id总是存在的,所以我很困惑。
想法?
【问题讨论】:
它存在,但不在同一个范围内(if let
创建一个新范围)。以guard let
为例。
【参考方案1】:
if let
语句仅将该变量绑定到它自己的块中:
if let entry_id = subJson["entry_id"].string
//entry_id exists in this block, and is non-nil
else
//entry_id was nil, doesn't exist
//entry_id doesn't exist anymore
如果您想为父范围绑定到该名称,请使用guard let
:
guard let entry_id = subJson["entry_id"].string else
//entry_id was nil, doesn't exist
//you MUST break, return, or call a @noreturn function from here
//entry_id exists for the rest of this scope, and is non-nil
【讨论】:
以上是关于在 swiftyJSON 上使用“if let”会使我的核心数据分配出错的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 上迭代 JSON 数组(使用 SwiftyJson 解析)
swift中 if let 与 guard let 对比,guard会降低一个分支