访问函数中的变量并将其作为另一个函数swift的返回值

时间:2014-10-31 06:46:18

标签: ios function swift global-variables uicollectionview

    import UIKit

class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {

    var collectionView: UICollectionView?

    var instanceOfCustomObject: CustomObject = CustomObject()
    var accessToken: NSString!
    var userDefaults: NSUserDefaults!

    var responseDictionary: NSDictionary!
//    var currentResponse: NSArray!


    // the range represents integer values 0, 1, and 2
    // the range now represents integer values 6, 7, and 8

    let colorWheel = ColorWheel()
//    let parse = Parse()

//    var currentResponse: NSArray?
//    struct photoCount {
//    init(responseDictionary: NSDictionary) {
//
//        //        var currentResponse = responseDictionary["data"] as NSDictionary
//
//        var currentResponse = responseDictionary.valueForKeyPath("data") as NSArray
//        var photoCount = currentResponse.count as Int
//        println(photoCount)
//    }
//    }
    var photoCount: Int!

//    private let api = "d4984c8cfa78689bd066d82bec820fd5"



    override func viewDidLoad() {
        super.viewDidLoad()

        userDefaults = NSUserDefaults.standardUserDefaults()
        self.accessToken = userDefaults!.objectForKey("accessToken") as NSString
        println(self.accessToken)

        //        instanceOfCustomObject.someProperty = "Hello World"
//        var accessToken : NSString? = NSString(instanceOfCustomObject.accessToken)
//        println(accessToken)
//        instanceOfCustomObject.authorize()
//        instanceOfCustomObject.simpleAuth()


        // Do any additional setup after loading the view, typically from a nib.
        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
//        layout.sectionInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
        layout.itemSize = CGSize(width: 124, height: 124)
        layout.minimumInteritemSpacing = 1.0
        layout.minimumLineSpacing = 1.0
        collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
        collectionView!.dataSource = self
        collectionView!.delegate = self
        collectionView!.registerClass(Cell.self, forCellWithReuseIdentifier: "Cell")
        collectionView!.backgroundColor = UIColor.whiteColor()
        self.view.addSubview(collectionView!)

        getData()

    }

    func getData() -> Void {
        let baseUrl = NSURL(string:"https://api.instagram.com/v1/users/3/media/recent/?access_token=\(self.accessToken)")

        let forcastUrl = NSURL(string: "", relativeToURL: baseUrl)

        //        let data = NSData(contentsOfURL: forcastUrl)
        //        println(data)
        let sharedSession = NSURLSession.sharedSession()
        let downloadTask: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL(baseUrl, completionHandler: { (location: NSURL!, response: NSURLResponse!, error: NSError!) -> Void in


            //            var urlContents = NSString.stringWithContentsOfURL(location, encoding: NSUTF8StringEncoding, error: nil)
            //            println(urlContents)

            let dataObject = NSData(contentsOfURL: baseUrl)
            //            println(dataObject)
            if (error == nil) {
                let responseDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataObject, options: nil, error: nil) as NSDictionary

                var currentResponse = responseDictionary.valueForKeyPath("data") as NSArray

                //                println(currentResponse)
                //                self.currentResponse = currentResponse as NSArray
                self.photoCount = currentResponse.count as Int
                println(self.photoCount)

                dispatch_async(dispatch_get_main_queue(), { () -> Void in

                    //                    self.temperatureLabel.text = "\(currentWeather.temperature)"
                    //                    self.iconView.image = currentWeather.icon!
                    //                    self.currentTimeLabel.text = "At \(currentWeather.currentTime!) it is"
                    //                    self.humidityLabel.text = "\(currentWeather.humidity)"
                    //                    self.percipitationLabel.text = "\(currentWeather.precipProbability)"
                    //                    self.summeryLabel.text = "\(currentWeather.summary)"
                    //
                    //                    self.refreshActivityIndicator.stopAnimating()
                    //                    self.refreshActivityIndicator.hidden = true
                    //
                    //                    self.refreshButton.hidden = false
                })

            } else {

                let networkIssueController = UIAlertController(title: "Error", message: "I got 99 problems but a bitch ain't one", preferredStyle: .ActionSheet)
                let okButton = UIAlertAction(title: "OK", style: .Default, handler: nil)
                networkIssueController.addAction(okButton)
                let cancelButton = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
                networkIssueController.addAction(cancelButton)

                self.presentViewController(networkIssueController, animated: true, completion: nil)

                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    //Stop refresh animation
                    //                    self.refreshActivityIndicator.stopAnimating()
                    //                    self.refreshActivityIndicator.hidden = true
                    //                    self.refreshButton.hidden = false

                })

            }

        })

        downloadTask.resume()

    }

在getData()函数中,名为“currentResponse”的变量检索url数组。然后我计算数组并​​将数字分配给名为“photoCount”的变量

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {


//        var photoCount = parse.photoCount(currentResponse)
        return photoCount
    }

我想使用“photoCount”变量告诉我的集合视图函数它应该有多少个部分!有20个网址,所以它应该输出20个方格,但目前photoCount是零!我需要将“photoCount”作为全局变量吗?多年来一直坚持这个请帮助!

1 个答案:

答案 0 :(得分:0)

加载视图控制器时,您的集合视图的大小会被指定为 nil ,并且不会随时随地更新。您必须异步重新加载集合视图。

getData 函数中,输入:

dispatch_async(dispatch_get_main_queue(), {
    self.photoCount = currentResponse.count as Int
    self.collectionView.reloadData()        
})