Мне просто интересно, почему я получаю эту ошибку. У меня есть структура как «Модель» и инициализируйте ее из функции 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
}
}
Несвязанные, но вы должны изучить стандартные соглашения об именах. Имена должны использовать camelCase - без подчеркивания. – rmaddy