为什么我不能使用我在swift 3中的viewDidLoad中定义的变量

时间:2017-05-16 07:30:20

标签: ios swift3

我在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 之外的

3 个答案:

答案 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
      }