簡體   English   中英

在 viewDidLoad() 函數之外使用全局變量

[英]Use global variables outside viewDidLoad() function

我在視圖類中有一個全局變量,我在 viewDidLoad() 中執行一些函數,並通過這些函數為這些全局變量(數組)分配一些值。 但是當我嘗試在 viewDidLoad() 之外重用它們時,我得到它們的 count = 0 就像這個函數:

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

     return prodItem.count;

}

這是我的完整代碼:

import UIKit

class NewViewController: UIViewController, UITableViewDelegate {

//define product details vars
var prodLink  = [String]();
var prodImg   = [String]();
var prodItem  = [String]();
var prodDesc  = [String]();
var prodPrice = [String]();
var prodSale  = [String]();

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    //define url
    let url  = NSURL(string: "https://www.iravin.com/new")!;

    //define task
    let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) -> Void in
        if  let urlContent = data {
            let webContent = NSString(data: urlContent, encoding: NSUTF8StringEncoding);
            let webArray   = webContent?.componentsSeparatedByString("<ul class=\"hProductItems clearfix\">");
            let webArray2  = webArray?[1].componentsSeparatedByString("</ul>");
            var prodArray  = webArray2?[0].componentsSeparatedByString("<li class=\"span3 clearfix\">");
            prodArray?.removeAtIndex(0);

            for oneProd in (prodArray)! {
                var prodData = [String]();
                prodData = oneProd.componentsSeparatedByString("\n\t\t\t\t\t\t\t<div class=\"thumbnail\">\n\t\t\t\t\t\t\t\t<a href=\"");
                prodData.removeAtIndex(0);
                prodData = prodData[0].componentsSeparatedByString("\"><img class=\"lazy\" data-src=\"");
                self.prodLink.append(prodData[0]);
                prodData = prodData[1].componentsSeparatedByString("\" src=\"img/loading.gif\" alt=\"\"></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"thumbSetting\">\n\t\t\t\t\t\t\t\t<div class=\"thumbTitle\">\n\t\t\t\t\t\t\t\t\t<h3>\n\t\t\t\t\t\t\t\t\t<span class=\"invarseColor\">");
                self.prodImg.append(prodData[0]);
                prodData = prodData[1].componentsSeparatedByString("</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"product-desc\">\n\t\t\t\t\t\t\t\t\t<p>");
                if prodData[0].containsString("Sale") {
                    let prodDataSale = prodData[0].componentsSeparatedByString("</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"label label-info\">Sale");
                    self.prodItem.append(prodDataSale[0]);
                    prodData = prodData[1].componentsSeparatedByString("</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"thumbPrice\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>");
                    self.prodDesc.append(prodData[0]);
                    prodData = prodData[1].componentsSeparatedByString("</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<div class=\"thumbButtons\">\n\t\t\t\t\t\t\t\t\t<button rel=\"");
                    var prodDataPrice = prodData[0].componentsSeparatedByString("<span class=\"strike-through\">");
                    prodDataPrice = prodDataPrice[1].componentsSeparatedByString("</span>");
                    self.prodPrice.append(prodDataPrice[0]);
                    self.prodSale.append(prodDataPrice[1]);
                } else {
                    self.prodItem.append(prodData[0]);
                    prodData = prodData[1].componentsSeparatedByString("</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"thumbPrice\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>");
                    self.prodDesc.append(prodData[0]);
                    prodData = prodData[1].componentsSeparatedByString("</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<div class=\"thumbButtons\">\n\t\t\t\t\t\t\t\t\t<button rel=\"");
                    self.prodPrice.append(prodData[0]);
                    self.prodSale.append(prodData[0]);
                }
            }
        }
    }

    task.resume();

}

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

    return prodItem.count;

}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    // get an instance of your cell
    let cell = tableView.dequeueReusableCellWithIdentifier("prodCell", forIndexPath: indexPath) as! MyCustomTableViewCell;

    cell.lblProdItem.text = self.prodItem[indexPath.row];
    return cell;

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

來自 ios 開發庫:與大多數網絡 API 一樣,NSURLSession API 是高度異步的。

任務完成后,您需要重新加載 tableview。 現在它開始任務,然后在完成之前查看計數,這就是它為 0 的原因。

            }
           dispatch_async(dispatch_get_main_queue()) {
            self.tableView.reloadData()
           }
        }
    }
    task.resume();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM