初始化程序未使用的结果

时间:2017-02-09 23:17:44

标签: json swift string url swift3

我只是想知道为什么会出现这个错误。我有结构'模型'并在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
    }
}

1 个答案:

答案 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来创建实例以开始