【问题标题】:Swift 3: Cannot call value of non function type 'Bundle'Swift 3:无法调用非函数类型“Bundle”的值
【发布时间】:2017-05-18 17:57:27
【问题描述】:

目前我正在处理我在 swift2 中的一个项目,我正在转换为 swift 3。我收到以下错误:

不能调用非函数类型'Bundle'的值

let modelURL = Bundle.mainBundle().URLForResource("VerseApp", withExtension: "momd")!

以下是代码:

lazy var managedObjectModel: NSManagedObjectModel = {
  let modelURL = Bundle.mainBundle().URLForResource("VerseApp", withExtension: "momd")!
   print(modelURL)
   return NSManagedObjectModel(contentsOfURL: modelURL)!
}()

【问题讨论】:

  • 这行有错误吗?让 modelURL = Bundle.mainBundle().URLForResource("VerseApp", withExtension: "momd")!
  • 帮助自己的简单提示:⌘-单击符号 (Bundle) 并在头文件中查找方法。

标签: ios swift3


【解决方案1】:

在 Swift 3 中语法发生了一些变化,它是 main 而不是 mainBundle()URLForResource 更改为 url(forResource:withExtension:) 并且 NSManagedObjectModel 的 init 从 init?(contentsOfURL:) 更改为 init?(contentsOf:)

lazy var managedObjectModel: NSManagedObjectModel = {
    let modelURL = Bundle.main.url(forResource: "VerseApp", withExtension: "momd")!
    print(modelURL)
    return NSManagedObjectModel(contentsOf: modelURL)!
}()

【讨论】:

  • @bittu 欢迎朋友 :)
【解决方案2】:

在 swift 3 中大部分 api 被重命名

试试这条线,而不是你的

 Bundle.main.url(forResource: "VerseApp", withExtension: "momd")

也可以看看这篇文章,它将帮助您了解自 2 版本以来的变化。

https://www.raywenderlich.com/135655/whats-new-swift-3 https://www.raywenderlich.com/156352/whats-new-in-swift-3-1

【讨论】:

    【解决方案3】:

    使用这个

    let modelURL = Bundle.main.url(forResource: "VerseApp", withExtension: "momd")!
    

    【讨论】:

      【解决方案4】:
      let modelURL = Bundle.mainBundle().URLForResource("VerseApp", withExtension: "momd")!
      

      用这个替换上面的行

      let modelURL = Bundle.main.url(forResource: "VerseApp", withExtension: "momd")
      

      【讨论】:

        【解决方案5】:

        使用此代码代替您的:

        var managedObjectModel: NSManagedObjectModel = {
                    let modelURL = Bundle.main.url(forResource: "VerseApp", withExtension: "momd")!
                    print(modelURL)
                    return NSManagedObjectModel(contentsOf: modelURL)!
                }()
        

        【讨论】:

          【解决方案6】:

          请试试这个 -

          let bundleUrl = Bundle.main.url(forResource: "VerseApp", withExtension: "momd")!
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多