我有变量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)
}
}
提前谢谢
答案 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.
是必要的,因为它在一个块内,编译器需要它用于上下文。