[英]Why sample iOS app in XCode 6 checks for nil of a non-optional variable?
在“Master-Details”示例中,在MasterViewController.swift
文件中随附XCode 6的Swift应用程序,它们定义了如下objects
:
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
?
那是一个错误; 我发现它编译没有错误或警告令人惊讶。 (我猜它可能会变成对isEqual:的调用,传递nil?)有趣的是,更惯用的版本:
if objects {
objects = NSMutableArray()
}
实际上是失败了; 你在if objects
行上得到一个错误,因为你无法测试NSMutableArray的boolean-ness。
你不需要防范nil
。 这是期权(或非期权)的全部观点。 此外,在斯威夫特,当您正在测试的nil
,如果变量是一个可选的(这也可能是唯一一次nil
无论如何),你可以说:
if optionalVar {
// do stuff
}
这可能只是由Xcode从Objective-C版本翻译而来,并不是“Swifty”。
这种事的另一个例子:
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Custom initialization
}
// Custom initialization
应该高于Swift中的super.init()
,但这只是从Objective-C版本翻译而来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.