我有一个带有init的类,我想用它来创建类的实例。
代码如下
class Article {
let id:Int
let title:String
let subtitle:String
let editor1:String
let mainImage:NSData
init(id:Int, title:String, subtitle:String, editor1:String, mainImage:NSData) {
self.id = id
self.title = title
self.subtitle = subtitle
self.editor1 = editor1
self.mainImage = mainImage
}
class func build(json:JSON) -> Article {
id = Int(json["id"].string),
title = json["title"].string,
subtitle = json["subtitle"].string,
editor1 = json["editor1"].string,
mainImage = json["images"]["main"].rawData() {
return Article(
id: id,
title: title,
subtitle: subtitle,
editor1: editor1,
mainImage: mainImage)
}
}
}
但我有错误
我做错了什么?
答案 0 :(得分:1)
一些事情看起来很不错。
Article?
,因为您有可能会返回零。id = Int(json["id...
之类的事情之后,你有很多无关的逗号。摆脱它们。答案 1 :(得分:1)
SwiftyJSON的.rawData()
是一个可选的getter。
所以我想你想要做的是使用if let
:
class func build(json:JSON) -> Article? {
id = Int(json["id"].string)
title = json["title"].string
subtitle = json["subtitle"].string
editor1 = json["editor1"].string
if let mainImage = json["images"]["main"].rawData() {
return Article(
id: id,
title: title,
subtitle: subtitle,
editor1: editor1,
mainImage: mainImage)
} else {
// ...
return nil
}
}
此外,您似乎复制/粘贴了文章初始值设定项中的参数,以便在函数的前面声明它们,但是您忘记删除行尾的逗号。
<强>更新强>
你的问题是你的类属性是不可变的(用let
声明)但在这个函数中你试图改变它们的值:
id = Int(json["id"].string)
这被解释为
self.id = Int(json["id"].string)
并且您无法更改self.id
的值,因为它是不可变的。
解决方案:
1-使用var
代替let
使属性可变。例如:
var id:Int
var title:String
var subtitle:String
var editor1:String
var mainImage:NSData
或
2-不要替换函数中的属性,因为无论如何你要使用新对象初始化。例如:
class func build(json:JSON) -> Article? {
if let img = json["images"]["main"].rawData() {
return Article(
id: Int(json["id"].string),
title: json["title"].string,
subtitle: json["subtitle"].string,
editor1: json["editor1"].string,
mainImage: img)
} else {
// ...
return nil
}
}
更新2
如果编译器抱怨“没有标记为尝试”,请使用“try?”执行“if let”:
if let img = try? json["images"]["main"].rawData() {
说明:SwiftyJSON可能在没有更新文档的情况下更改了此方法(或者我没有找到它)。它先前返回了一个Optional,现在似乎是“抛出”了。用“试试?”让你再次选择它。
答案 2 :(得分:0)
你有,他们应该不在的地方。试试这个:
class func build(json:JSON) -> Article {
id = Int(json["id"].string)
title = json["title"].string
subtitle = json["subtitle"].string
editor1 = json["editor1"].string
mainImage = json["images"]["main"].rawData() {
return Article(
id: id,
title: title,
subtitle: subtitle,
editor1: editor1,
mainImage: mainImage)
}
}