【问题标题】:Object Initialisation in SwiftSwift 中的对象初始化
【发布时间】:2016-05-31 09:17:13
【问题描述】:

我有以下代码:

var myBundle:NSBundle
myBundle = NSBundle.mainBundle() // what is the role of this line ??

if let path = myBundle.pathForResource("CellDescriptor", ofType: "plist"){

     var cellDescriptors: NSMutableArray! 
     cellDescriptors = NSMutableArray(contentsOfFile: path)
}

为什么我使用这行代码myBundle = NSBundle.mainBundle()?我读到它正在初始化myBundle 对象。但这究竟是什么意思?

为什么不初始化myBundle对象就不能调用pathForResource函数?

谢谢。

【问题讨论】:

标签: ios swift object


【解决方案1】:

让我们一步一步来思考这条线:

myBundle = NSBundle.mainBundle()

您声明变量 myBundle 的类型为 NSBundle。现在你需要用适当的实例对象初始化这个变量。例如,您可以使用构造函数。但是对于某些类,您有“静态构造函数”。如果您没有将变量设置为正确的对象 - 默认情况下它具有 nil 值,因此您无法访问实例方法。

NSBundle.mainBundle() 

- 这是对 NSBundle 类(静态方法)的 mainBundle 方法的调用,它会返回正确的实例(在这种情况下 - 它是应用程序的主包。来自文档:

对应于bundle目录的NSBundle对象 包含当前可执行文件。此方法可能会返回有效的捆绑包 即使对于未捆绑的应用程序也是如此。如果捆绑包也可能返回 nil 无法创建对象,因此请始终检查返回值。

希望这会有所帮助。

【讨论】:

  • 谢谢@Doro。你能告诉myBundle将被初始化什么,即我们实际上试图初始化它吗?由于我是初学者,请多多包涵。
  • developer.apple.com/library/mac/documentation/Cocoa/Reference/… NSBundle 类有很多创建bundle 对象的方法,但是你最常使用的是mainBundle 方法。主包表示包含当前执行代码的包目录。因此,对于应用程序,主包对象可让您访问应用程序附带的资源。
  • @DShah,当然。我只是解释了现有的代码,有问题
  • 抱歉,我没有投反对票。我刚刚回答了@Pawandeep Singh
  • @DShah, @Doro 我从您的 cmets 推断出初始化 myBundle 对象将允许访问应用程序主包。但它实际上在编码中意味着什么,它是否定义了变量,NSBundle 类的指针,没有它你就无法访问定位资源?
猜你喜欢
  • 2014-07-27
  • 2020-01-03
  • 2020-03-29
  • 2013-06-27
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多