在 swift 2 中解析 json 对象
Posted
技术标签:
【中文标题】在 swift 2 中解析 json 对象【英文标题】:parse json object in swift 2 【发布时间】:2016-01-29 20:05:20 【问题描述】:我是 ios 和 Swift 编程的新手,我正在尝试制作一种解析 json 对象的方法
我的json如下
status : true;
data :[
"url" : "",
"startDate" : "",
"endDate" : "",
...
]
我的swift代码就是这样的
导入基础
class SplashResponse
let STATUS = "status";
let DATA = "data";
let URL = "Url"
let CONTACT_NO = "ContactNo";
let SPLASH_IMAGE = "SplashImage";
let SPLASH_ID = "SplashId";
let TITLE = "Title";
let NO_VIEW = "NoView";
let IS_ACTIVE = "isActive";
let START_DATE = "StartDate";
let END_DATE = "EndDate";
var status : Bool
var url : String
var contactNo : String
var splashImage : String
var splashId : Int
var title : String
var numOfViews : Int
var isActive : Bool
var startDate : String
var endDate : String
init(data : NSDictionary)
status = data[STATUS] as! Bool;
if (status == true)
if let item = data[DATA] as? [String: AnyObject]
url = item[URL] as! String;
contactNo = item[CONTACT_NO] as! String;
splashImage = item[SPLASH_IMAGE] as! String;
splashId = item[SPLASH_ID] as! Int;
title = item[TITLE] as! String;
numOfViews = item[NO_VIEW] as! Int;
isActive = item[IS_ACTIVE] as! Bool;
startDate = item[START_DATE] as! String;
endDate = item[END_DATE] as! String;
else
url = "";
contactNo = "";
splashImage = "";
splashId = -1;
title = "";
numOfViews = -1;
isActive = false;
startDate = "";
endDate = "";
我遇到了错误
Return from initializer without initializing all stored properties
【问题讨论】:
更正constant
s 类中声明的 json 变量名的值。 Json 变量是url
,但常量值是Url
。首先更正它并重试,让我们知道它是如何进行的。它适用于 JSON 的所有其他变量,确保它们都被提及为常量。
【参考方案1】:
您的问题是,如果 if let item = ...
条件失败,编译器不知道如何初始化您的值。
status
条件涵盖了两个选项,但在 true
分支中创建了一个没有 else 分支的新条件,因此编译器正确地抱怨未初始化的存储属性。
我的建议是首先安全地打开 data[DATA]
而不创建新范围,然后使用这些值。
【讨论】:
【参考方案2】:错误信息已经够清楚了,
从初始化程序返回而不初始化所有存储的属性
很明显,您的所有属性都是存储属性。
因此,您必须确保在初始化程序返回后,每个存储的属性都将具有其价值。它可以是 nil 或某个值。
首先,在你的情况下,
status = data[STATUS] as! Bool;
可能会失败,因此其余的都不会被执行。
尽管status == true
可能会成功,但伴随这种情况的所有代码都可能会失败。这违反了我刚才提到的规则。
【讨论】:
你的想法是正确的,但在这种情况下status
是强制解包,告诉编译器“我发誓会有一个值”。编译器很乐意遵守,但如果值为 nil,应用程序当然会在运行时崩溃。以上是关于在 swift 2 中解析 json 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SwiftyJSON 在 Swift 中解析这个 JSON 对象?
在 Swift 3.0 中访问从 iTunes API 解析的 JSON 对象