Json 未使用初始值设定项的结果
我只是想知道为什么我会犯这个错误。我将struct设置为“Model”,并从Json 未使用初始值设定项的结果,json,swift,string,url,swift3,Json,Swift,String,Url,Swift3,我只是想知道为什么我会犯这个错误。我将struct设置为“Model”,并从extract_data函数初始化它,该函数在viewDidLoad()中调用,但当我在struct中设置断点时,我可以看到所有内容都已正确初始化,奇怪的是,如果我将标签设置为struct.base字符串,不知怎的,它不起作用……我是一个初学者,所以请给出一个解释:) 这是我的ViewController: override func viewDidLoad() { super.viewDidLoad()
extract_data
函数初始化它,该函数在viewDidLoad()
中调用,但当我在struct中设置断点时,我可以看到所有内容都已正确初始化,奇怪的是,如果我将标签设置为struct.base字符串
,不知怎的,它不起作用……我是一个初学者,所以请给出一个解释:)
这是我的ViewController
:
override func viewDidLoad() {
super.viewDidLoad()
get_data("https://api.fixer.io/latest?base=CHF")
testLabel.text = TestStruct().base
//ANOTHER ERROR HERE (MISSING ARGUMENT FOR PARAMETER "base" IN CALL)
}
@IBOutlet var testLabel: UILabel!
var test:[TestStruct] = [TestStruct]()
func get_data(_ link:String){
let url:URL = URL(string: link)!
let sessioin = URLSession.shared
let request = URLRequest(url: url)
let testtask = sessioin.dataTask(with: request, completionHandler: { (data, response, error) in
self.extract_data(data)
})
testtask.resume()
}
func extract_data(_ data:Data?){
let json:Any?
if(data==nil){
return
}
do {
json = try JSONSerialization.jsonObject(with: data!, options: [])
//The whole JSON
let data_dictonary = json as? [String: Any]
//Just the "base"
let data_base = data_dictonary?["base"] as! String
print(data_base)
//Just the "date"
let data_date = data_dictonary?["date"] as! String
print(data_date)
//All the exchange rates
let data_rates = data_dictonary?["rates"] as! [String: Double]
print(data_rates)
TestStruct.init(base: data_base, date: data_date, rates: data_rates)
//ERROR IS HERE
}catch {
return
}
}
这是我的模型:
struct TestStruct {
var base: String
var date: String
var rates: [String: Double]
init(base: String, date: String, rates: [String:Double]) {
self.base = base
self.date = date
self.rates = rates
}
}
您调用初始值设定项的语法不正确。更改:
TestStruct.init(base: data_base, date: data_date, rates: data_rates)
致:
错误是:
testLabel.text = TestStruct().base
您正试图在新创建的TestStruct
实例上访问base
属性,但在TestStruct
上没有init
,没有参数
您需要通过传递所有必需的参数来创建
TestStruct
,但这似乎毫无意义,因为您只需要它的base
,并且您需要base
来创建实例开始。嘿,感谢它起作用了:)…快速问题您知道我为什么不能让标签工作吗?您从未使用TestStruct
在extract\u data
中创建的实例。我建议在视图控制器类中添加一个属性,用于存储结构实例。然后在viewDidLoad
中引用属性的base
属性。这不是正确的语法。您需要var-test:TestStruct?
。在extract\u data
中,而不是让someVar=TestStruct…
执行test=TestStruct…
。在viewdiload
中使用testLabel.text=test?.base
。好的,我在viewdiload中设置了一个断点进行检查,结果仍然为零,但是为什么…不相关,但您应该学习标准命名约定。名称应使用大小写-无下划线。
testLabel.text = TestStruct().base