swift 3中的全局变量
Posted
技术标签:
【中文标题】swift 3中的全局变量【英文标题】:Global variable in swift 3 【发布时间】:2017-11-09 22:18:27 【问题描述】:我有一个变量 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)
提前谢谢你
【问题讨论】:
你为什么不把它变成一个类实例变量呢?但是,如果您希望它是全局的,您可以在class
块之外定义它。
我该怎么做?我是新来的 swift
您的文本字段txt_ciudadU
是类的实例变量或属性。这将是相同的,只是没有@IBOutlet
或weak
。所以可能类似于var provincias_ws: String
(假设它是String
),你会将它放在与文本字段变量相同的层次结构级别。您将摆脱当前的let
旁边的provincias_ws
并在它前面加上self.
(即self.provincias_ws = res["data"]["provincias"]
),因为它在一个块内并且需要它作为上下文。
我的 provincias_ws 是 JSON 类型,如何在全局中声明?
将上面的评论移至答案。而“JSON”并不是真正的类型。我不知道您的 JSON 数据的结构,但看起来它可能是一个字符串数组?
【参考方案1】:
可以通过在类块之外定义它来创建“全局”变量(意味着可以从项目中的任何位置访问它)。
但是,看起来你想要的是一个类实例变量。
您的文本字段txt_ciudadU
已经是ViewCtrl
类的实例变量或属性的示例。
这将是相同的,只是没有@IBOutlet weak
。
可能是这样(假设它是一个字符串):
var provincias_ws: String?
注意?
将它声明为一个可选值,因为它在被设置到你的块中之前不会被设置。您还可以将其初始化为某个默认值或空值(例如var provincias_ws = ""
),或者您可以使用!
表示您不会在它为 nil 时尝试解包,尽管最好不要依赖它,因为它是容易出错。您选择做什么取决于您的需求。
并且您可以将它放在与文本字段变量相同的层次结构级别(即在它的上方或下方,尽管它实际上可以放在任何地方,只要它不在函数或另一个块内)。
你会去掉provincias_ws
旁边的当前let
,并在它前面加上self.
,即:
self.provincias_ws = res["data"]["provincias"]
self.
是必需的,因为它位于块内,编译器需要它作为上下文。
【讨论】:
我也这样做了,但是我得到了这个错误:不能用字符串类型的索引为 JSON 类型的值下标 那么,您使用的任何提供此JSON
对象的库都不支持像您所做的那样使用字符串值下标(即res["data"]
)。这与您帖子的问题无关。
您之前没有收到该错误吗...?此外,您还没有真正提供足够的信息来确定 JSON 数据的结构,因此上述 var 的类型 (String) 只是一个示例……您必须将其更改为您期望的任何内容。
我正在使用 SwiftyJSON
您的原始代码中是否存在编译器错误?如果不是,它说provincias_ws
是什么类型? (选项点击变量名)以上是关于swift 3中的全局变量的主要内容,如果未能解决你的问题,请参考以下文章