我只是想知道为什么会出现这个错误。我有结构'模型'并在extract_data
函数中调用viewDidLoad()
函数初始化它,但是当我在结构中设置断点时,我可以看到所有内容都已正确初始化,如果我采用了我的标签,那就很奇怪了把它设置为我的Struct.base String
,它不会以某种方式工作......我是初学者,所以我会非常感激解释:)
这是我的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
}
}
答案 0 :(得分:0)
调用初始值设定项的语法不正确。变化:
TestStruct.init(base: data_base, date: data_date, rates: data_rates)
为:
let someVar = TestStruct(base: data_base, date: data_date, rates: data_rates)
错误:
testLabel.text = TestStruct().base
您尝试访问新创建的base
实例上的TestStruct
属性,但init
上没有TestStruct
且没有参数。
您需要通过传递所有必需的参数来创建TestStruct
,但这似乎毫无意义,因为您只需要base
并且需要base
来创建实例以开始