繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM