[英]Why I can't use variable that I defined in viewDidLoad in swift 3
我在viewDidLoad
定义了一个变量,但是问题是我无法在viewDidLoad
之外的同一View Controller中使用该变量。
这是我的代码:
class ProfileSettingTableViewController: UITableViewController {
var userAccountMoney = String()
var headerList = ["account\(ProfileSettingTableViewController().userAccountMoney)" , "Help" , "" ]
override func viewDidLoad() {
super.viewDidLoad()
let userAccount = profileViewController().userMoney
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale(identifier: "fa")
numberFormatter.numberStyle = NumberFormatter.Style.decimal
numberFormatter.string(from: NSNumber(value: userAccount))
userAccountMoney.append(numberFormatter.string(from: NSNumber(value: userAccount))!)
}
这段代码可以编译,但是即使我定义了例如让a = 1000,我也无法在viewDidLoad
外部到达
问题是当您在任何方法之外初始化另一个属性时,您无法访问实例属性,因为编译器不知道哪个属性第一个初始化了,因此您需要做的是声明headerList
仅将account
字符串仅设置为数组的第一个对象,然后后者以新的价值对其进行了更改。
var userAccountMoney = String()
var headerList = ["account" , "Help" , "" ]
现在,在viewDidLoad
只需将第一个对象替换为新值即可。
override func viewDidLoad() {
super.viewDidLoad()
let userAccount = profileViewController().userMoney
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale(identifier: "fa")
numberFormatter.numberStyle = NumberFormatter.Style.decimal
numberFormatter.string(from: NSNumber(value: userAccount))
userAccountMoney = numberFormatter.string(from: NSNumber(value: userAccount))!
self.headerList[0] = "account\(userAccountMoney)"
}
我猜您必须修改有关属性的Swift文档 。
在您的情况下,您有一个local variable
其生命周期在当前作用域声明的末尾结束。 这意味着,如果您在viewDidLoad
函数中声明了一个变量,它将在函数执行结束时终止。
更新:这里有一个简单的使用方法示例:
class MyViewController {
var userAccountMoney: String!
override func viewDidLoad() {
super.viewDidLoad()
userAccountMoney = numberFormatter.string(from: NSNumber(value: userAccount))!
}
func otherFunc() {
var headerList = [String(describing:"Account \(userAccountMoney)")]
}
}
您可以将此变量置于函数之外,并作为实例变量。
class VC: ViewController {
var userAccountMoney = String()
override func viewDidLoad() {
super.viewDidLoad()
userAccountMoney = numberFormatter.string(from:
NSNumber(value: userAccount))!
}
//access userAccountMoney anyWhere in the instance function of view Controller
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.