全局变量在不同视图控制器中使用时返回空值

Posted

技术标签:

【中文标题】全局变量在不同视图控制器中使用时返回空值【英文标题】:Global variable returning nil value when used in diffrent view controller 【发布时间】:2017-01-10 03:40:15 【问题描述】:

我有 4 个全局变量(字符串数组),我将它们附加到一个视图控制器(比如 firstViewController)中。当我尝试在另一个视图控制器中访问它们时附加值后,正在传递一个 nil 值

第一个视图控制器

print("\(json)")
            if let stockInfo = json?[0] 

                if let value = stockInfo["l"] as? String 
                    print("Teja\(value)")
                    stockCurrentValue.append(value)
                    print("Teja\(stockCurrentValue)")

                

                if let cp = stockInfo["cp"] as? String
                    print("Teja\(cp)")
                    stockCp.append(cp)
                    print("Tea\(stockCp)")
                

                if  let c = stockInfo["c"] as? String
                    print("Teja\(c)")
                    stockC.append(c)

                
                if let pcls_fix = stockInfo["pcls_fix"] as? String

                    print("Teja\(pcls_fix)")
                    stockPrevValue.append(pcls_fix)

                


            

变量stockCurrentValue,stockC,stockCP,stockPrevValue是我声明的四个全局变量。

但是当我尝试在新的 viewController 中访问它们时

第二视图控制器

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

    print(selectedStockNames.count)
    return selectedStockNames.count




func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "myStocks") as! StockCell

        cell.stockNameCell.text = selectedStockNames[indexPath.row]


    print("Teja123\(stockCurrentValue)")

    stockValueFromGF = selectedStockValues[indexPath.row]

    print("Teja123\(stockCp)")

    return cell

因此,当我在 firstViewContoller 中打印 StockCp 值时,我得到了该值,但是当我尝试在 seconViewController 中打印相同的变量时,我得到“[]”(零值)

【问题讨论】:

如何确定SecondViewController 中的stockCurrentValue?你确定它取自FirstViewController吗?即使FirstViewController 的这些属性是可公开访问的,您也需要在SecondViewController 中的某个时间点显式调用它,例如stockCurrentValue = firstVC.stockCurrentValue 其中firstVC 是FirstViewController 的实例,否则FirstViewController.shared.stockCurrentValue 如果它是单例 我在一个单独的 swift 文件中声明了所有变量。我怎样才能创建一个实例firstVc,请你帮我。 我很确定您不会创建 UIViewController 的实例来仅从其子类中检索一些值。如果您使用了UIViewController 子类,您应该在某个时候已经创建了它,如果您没有意识到自己这样做了,可能通过情节提要。要引用 FirstViewController 的实例,您应该考虑从呈现它的 ViewController 中检索它(如果没有,则为 rootViewController),或者它可能只是呈现 SecondViewController 的那个实例。在这种情况下,您可以在演示文稿之前传递值。 或者,您需要向我展示您如何填充 SecondViewController 属性,例如 selectedStockValuesstockCurrentValue,以便我帮助您识别错误 【参考方案1】:

使用协议并在要设置值的视图控制器中定义它。

使用函数内部的方法来改变全局变量的值。

调用函数并在要访问变量的视图控制器中设置委托。

【讨论】:

以上是关于全局变量在不同视图控制器中使用时返回空值的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中全局变量和函数的最佳实践是啥?

在目标 c 中使用全局变量

Cocoa xcode 4.3 全局变量

所有控制器和视图的全局变量

何时在 Swift 中使用全局变量

如何使用全局变量数组实现 userDefaults