为什么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报告