执行dispatch_async执行(Swift)

时间:2016-03-20 18:18:21

标签: ios swift

import UIKit

class ViewController: UIViewController {
    var testArray:[String] = []
    override func viewDidLoad() {
        super.viewDidLoad()
        doThis(nil)
        // Do any additional setup after loading the view, typically from a nib.
    }

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

    func doThis(completion:(() -> Void)?) {
        dispatch_async(dispatch_get_main_queue(), {() -> Void in
            if let completionBlock = completion {
                completionBlock()
            }

            self.testArray.append("first")
            print(self.testArray)
            if self.testArray == [] {
                print("has data")
            } else {
                print("null")
            }
        })
    }
}

输出:

["first"]
null

我想知道为什么数组是nil

2 个答案:

答案 0 :(得分:2)

数组不是零。它不能为零,因为nil是Optional的一种情况,并且数组未被声明为Optional

据推测,您想知道为什么您的程序会打印null。它会打印null,因为if条件为false。 if条件为self.testArray == []。这是假的,因为数组不是空的。

也许你在没有意识到的情况下扭转了这种状况的感觉。

答案 1 :(得分:0)

由于你的self.testArray有项目self.testArray == []将是false。另外,使用self.testArray.count>会更好。检查数组项目时为0。