なぜこのエラーが発生するのか不思議でした。私は 'モデル'として構造体を持っており、viewDidLoad()
で呼び出されるextract_data
関数から初期化しますが、構造体にブレークポイントを設定すると、すべてが正しく初期化され、何か奇妙なことがわかります。それは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