swift中的全局变量3

时间:2017-11-09 22:18:27

标签: swift3 swifty-json

我有变量provincias_ws,它有一个服务的答案,到目前为止一切都很好,但我想知道我如何使变量provincias_ws是全局的,因为我想在textFieldDidBeginEditing方法中打印它

class ViewCtrl: UIViewController, ValidationDelegate, UITextFieldDelegate {
    @IBOutlet weak var txt_ciudadU: SearchTextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        opciones_autocompletado()
        txt_ciudadU.delegate = self
    }
    func opciones_autocompletado(){
        txt_provinciaU.inlineMode = true
        txt_ciudadU.inlineMode = true
        Services.objServices.ServProv().then{
            data -> Void in
            let res = JSON(data)
            let status = res["status"].boolValue
            if(status){
                let provincias_ws = res["data"]["provincias"] //How to make this variable global
            }else{
                let error = res["error"]["error_data"].stringValue
                print(error)
            }
            SVProgressHUD.dismiss()
            UIApplication.shared.endIgnoringInteractionEvents()
            }.catch{
                error -> Void in
                SVProgressHUD.dismiss()
                UIApplication.shared.endIgnoringInteractionEvents()
        }
    }
    func textFieldDidBeginEditing(_ textField: UITextField) {
        print(provincias_ws)
    }
}

提前谢谢

1 个答案:

答案 0 :(得分:1)

可以通过在类块之外定义变量来创建“全局”变量(意味着它可以从项目中的任何位置进行访问)。

但是,看起来你想要的是一个类实例变量。

您的文本字段txt_ciudadU已经是类ViewCtrl的实例变量或属性的示例。

这是相同的,只是没有@IBOutlet weak

所以可能是(假设它是一个字符串):

var provincias_ws: String?

请注意?将其声明为可选值,因为在块内设置之前不会设置它。您也可以将其初始化为某个默认值或空值(例如var provincias_ws = ""),或者您可以使用!表示您不会尝试打开它时为零,尽管最好不要依赖它因为它容易出错。你选择做什么取决于你的需求。

你会把它放在与你的文本字段变量相同的层次级别(即它的正上方或下方,尽管它可以真正去任何地方,只要它不在函数或其他块内)。

你将摆脱let旁边的当前provincias_ws并在self.之前加上它,例如:

self.provincias_ws = res["data"]["provincias"]

self.是必要的,因为它在一个块内,编译器需要它用于上下文。