我在viewDidLoad
中定义了一个变量但问题是我无法在viewDidLoad
之外的同一个视图控制器中使用该变量。
这是我的代码:
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
之外的
答案 0 :(得分:1)
问题是,当您在任何方法之外初始化另一个属性时,您无法访问实例属性,因为编译器不知道哪个属性初始化了第一个,所以您需要做的是声明headerList
只需设置{{ 1}} string只作为数组的第一个对象,后者用新值改变它。
account
现在在var userAccountMoney = String()
var headerList = ["account" , "Help" , "" ]
中,只需用新值替换第一个对象。
viewDidLoad
答案 1 :(得分:0)
我猜你必须修改Swift documentation关于属性的内容。
在您的情况下,您有一个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)")]
}
}
答案 2 :(得分:0)
你可以在函数外部取这个变量并作为实例变量。
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
}