为什么XCode 6中的示例iOS应用程序会检查非可选变量的nil?

为什么XCode 6中的示例iOS应用程序会检查非可选变量的nil?,ios,swift,xcode6,Ios,Swift,Xcode6,在MasterViewController.Swift文件中XCode 6附带的“Master Details”示例Swift应用程序中,它们定义了对象,如下所示: var objects = NSMutableArray() 然后在insertNewObject方法中,他们在使用前检查nil: func insertNewObject(sender: AnyObject) { if objects == nil { objects = NSMutableArray()

MasterViewController.Swift
文件中XCode 6附带的“Master Details”示例Swift应用程序中,它们定义了
对象
,如下所示:

var objects = NSMutableArray()
然后在
insertNewObject
方法中,他们在使用前检查
nil

func insertNewObject(sender: AnyObject) {
    if objects == nil {
        objects = NSMutableArray()
    }
    objects.insertObject(NSDate.date(), atIndex: 0)
    let indexPath = NSIndexPath(forRow: 0, inSection: 0)
    self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}

如果
objects
不是可选的,并且
objects=nil
抛出错误,为什么它们需要防范
nil

您不需要防范
nil
。这就是期权(或非期权)的全部要点。此外,在Swift中,当您测试
nil
时,如果变量是可选变量(这是唯一一次变量可以是
nil
),您可以说:

if optionalVar { 
    // do stuff
}
这可能只是由Xcode从Objective-C版本翻译过来的,并没有“快速”的功能

这类事情的另一个例子:

init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    // Custom initialization
}

在Swift中,
//自定义初始化
应该在
super.init()上方,但这只是从Objective-C版本翻译过来的。

这是一个bug;我感到惊讶的是,它编译时没有错误或警告。(我猜这可能会变成对isEqual:的调用,超过零?)有趣的是,更惯用的版本:

if objects {
    objects = NSMutableArray()
}

确实失败了;如果对象
行出现错误,因为无法测试NSMutableArray的布尔值。

我认为这只是模板代码中的错误。。。你应该提交一份bug报告