Swift:在另一个.swift文件中使用变量

3

我正试图制作一个展示火车信息的应用程序。

我有两个文件,TrainViewController.swift和TrainDataManager.swift。

以下是TrainViewController.swift代码的开头:

class TrainViewController: UIViewController {

@IBAction func Train100(sender: UIButton) {
    var num = "100"
    }

在TrainDataManager.swift中,我有以下内容:
let URL = "http://myawesomeapi.net/rqst?number=\(num)&otherthing=1"

当然,我遇到了一个“未解决标识符'num'”的错误。我在互联网上尝试了很多方法,但是我无法在TrainDataManager.swift中访问“num”。


你可以使用单例模式。 - Nurdin
3个回答

2

num是一个局部变量——它只存在于Train100函数中。

如果你想在另一个函数中使用局部变量,你应该将它作为参数传递。你的TrainDataManager可以添加一个类似这样的方法:

func getTrainInfo(trainID : String) {
    let URL = "http://myawesomeapi.net/rqst?number=\(trainID)&otherthing=1"
}

然后调用该函数,传递适当的值:
@IBAction func Train100(sender: UIButton) {
    var num = "100"
    myTrainDataManager.getTrainInfo(num)
}

这将调用getTrainInfo(_),并将"100"作为参数传递。

你也可以在全局级别声明变量以便在多个地方访问它,但我从不建议这样做。一想到这个我就感到非常不舒服。 - Charles Caldwell
@CharlesCaldwell 嗯,我差点就加上了,但最终决定不加。 - Aaron Brager
@AaronBrager 非常感谢您的帮助,但现在我在我的TrainViewController中遇到了“未解决的标识符'myTrainDataManager'”错误。您有任何想法吗? - Julian B
它完美地工作了,我只需要删除您在TrainDataManager之前添加的“my”即可。非常感谢! - Julian B

-1

你所需要做的就是像这样将 num 转化为一个共有变量:

class TrainViewController: UIViewController {

var num 
@IBAction func Train100(sender: UIButton) {
    num = "100"
}

在另一个类中,您必须创建一个Train View Controller类的对象,并像这样引用num:

class TrainDataManger... {
    func ... {
        let tvc : TrainViewController = TrainViewController()
        let URL = "http://myawesomeapi.net/rqst?number=\(tvc.num)&otherthing=1"
    }
}

谢谢,但如果我写成“var num”,就会出现“模式中缺少类型注释”的错误提示。 - Julian B
为了解决这个问题,只需写入:var num:String = String() - Maanit
谢谢!代码可以运行,但是tvc.num为空。 (http://myawesomeapi.net/rqst?number=&otherthing=1已加载。) - Julian B
它被视为空,因为按钮实际上没有更新变量……即使我按下按钮,tvc.num仍将获取第一个“var num:String = String()”。 - Julian B

-1

你可以像这样使用。使用Singleton模式,创建Trainer NSObject

Trainer.swift

import Foundation

class Trainer : NSObject{

    var num : Int!

    init(num: Int) {
        self.num = num
    }

    func getNum() -> Int {
        return num;
    }

    func setNum(num:Int){
        self.num = num;
    }
}

TrainViewController.swift

class TrainViewController: UIViewController {

override func viewDidLoad() {
        super.viewDidLoad()
        let instanceTrainer = Trainer()
}

@IBAction func Train100(sender: UIButton) {
    instanceTrainer.setNum(100)
    }

TrainDataManger.swift

var num: Int

num = instanceTrainer.getNum()

let URL = "http://myawesomeapi.net/rqst?number=\(num)&otherthing=1"

谢谢,但我在TrainViewController.swift中得到了“调用中参数'num'缺失”的错误,这是因为let instanceTrainer = Trainer()。 - Julian B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接