Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以后如何在Swift中重用变量_Swift - Fatal编程技术网

以后如何在Swift中重用变量

以后如何在Swift中重用变量,swift,Swift,我试图捕获一个用户输入(textfield+按钮),然后在程序中重用结果,但我不知道如何做到这一点 import UIKit class ViewController: UIViewController { @IBOutlet weak var resultLabel: UILabel! @IBOutlet weak var moneyTextField: UITextField! @IBAction func convert(_ sender: Any) {

我试图捕获一个用户输入(textfield+按钮),然后在程序中重用结果,但我不知道如何做到这一点

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var resultLabel: UILabel!
    @IBOutlet weak var moneyTextField: UITextField!

    @IBAction func convert(_ sender: Any) {
        let convertion:Double = Double(moneyTextField.text!)!
        print(convertion)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let url = URL(string: "https://www.x-rates.com/calculator/?from=EUR&to=USD&amount=1")!
        let request = NSMutableURLRequest(url : url)
        let task = URLSession.shared.dataTask(with: request as URLRequest) {
            data, response, error in
            var rateValue:Double = 0.0;
            if let error = error {
                print(error)
            } else {
                if let unwrappedData = data {
                    let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue)
                    var stringSeperator = "<span class=\"ccOutputRslt\">"
                    if let contentArray = dataString?.components(separatedBy: stringSeperator){
                        if contentArray.count > 0 {
                            stringSeperator = "<span"
                            let newContentArray = contentArray[1].components(separatedBy: stringSeperator)
                            if newContentArray.count > 0 {
                                rateValue = Double(newContentArray[0])!
                                print(newContentArray[0])
                            }
                        }
                    }
                }
            }
            //
            print("Rate is \(rateValue)");

            DispatchQueue.main.sync(execute: {
                self.resultLabel.text = "the value of the dollar is " + String(rateValue)
            }
        )}
        task.resume()
    }
}
}


但我有一个错误:无法在第26行使用类型为“(String?)的参数列表调用类型为“Double”的初始值设定项。你能帮帮我吗?谢谢

在函数之外创建一个变量

 var anyVariableYouWantToAccessLater: Double?

您可以在任何地方使用此变量。

因为您在
viewDidLoad
期间下载速率,所以我假设这是您想要保留的

向类中添加新属性

class ViewController: UIViewController {
    var fxRate: Double?
    ...
viewDidLoad
中,使用下载的值更新此属性

rateValue = Double(newContentArray[0])!
fxRate = rateValue
convert
func中(或您想使用费率的任何地方)


这至少是你第三次发布同样的问题了。请停止删除和重新发布您的问题。我知道我在做什么;-)你不需要提醒我。我试图更明确一些,因为我没有得到任何回应。你有给我的吗?如果你觉得你的问题不够清楚,你应该编辑它而不是创建一个新的。这仍然会在活动问题列表中增加你的问题,因此换一个新问题没有多大好处。另外,如果您不小心,删除问题可能会导致自动禁止提问。谢谢您的反馈。谢谢你的建议。我这样做了,但现在出现了错误:无法在第26行使用类型为“(String?)的参数列表调用类型为“Double”的初始值设定项。你能看一下吗?我用你的代码编辑了我的第一篇文章。许多thxIt似乎都可以使用:如果let rate=fxRate,let money=moneyTextField.text{convertedAmount=Double(rate)*Double(money)!我现在只需要找到一种更新标签的方法,只需将
Double(moneyTextField.text)
更改为
Double(moneyTextField.text??“0”)
我同意@PramodKumarSaxena的观点,最好避免强行拆封。我更新了答案。它成功了!我能够更新标签。谢谢!
rateValue = Double(newContentArray[0])!
fxRate = rateValue
@IBAction func convert(_ sender: Any) {
    var convertedAmount = 0.0
    if let rate = fxRate, let money = Double(moneyTextField.text ?? "0") {
        convertedAmount = rate * money
    }
    print(convertedAmount)
}