从 Swift 2.3 -> 3.2 转换时,无法将 String 类型的值转换为指定类型 NSManagedObjectContext

Cannot convert value of type String to specified type NSManagedObjectContext, While converting from Swift 2.3 -> 3.2

我需要帮助。从 Swift 2.3 -> 3.2 转换时,我收到以下错误。我无法解决此错误。

以下是我的编码内容,我遇到了一些问题。

Error1 : Cannot convert value of type String to specified type NSManagedObjectContext**

Error2 : Cannot convert return expression of type URL to return type URL.

 class func persistentFileURL(_ name: String, enclosingDirectoryName: String) -> Foundation.URL {
        let directoryURL = self.directoryForPersistentStorage(enclosingDirectoryName)
        let urlPath = directoryURL.path
        let filePath: NSManagedObjectContext = (urlPath as NSString).appendingPathComponent(name) //Error1 : Cannot convert value of type String to specified type NSManagedObjectContext 
        
        return URL(context: filePath) // Error2 : Cannot convert return expression of type URL to return type URL.
    }

注意:URL 是单独的 Class 声明来处理此问题:URL_Class

请帮助我。我是 iOS 的新手。无法理解此类错误。

let filePath: NSManagedObjectContext = (urlPath as NSString).appendingPathComponent(name)

应该阅读

let filePath: String = (urlPath as NSString).appendingPathComponent(name)

错误2:

URL 没有任何使用 context: 的构造函数。尝试使用 init(fileURLWithPath:) 代替(它需要一个字符串,因此您需要使 filePath 成为字符串的实例而不是 NSManagedObject)。

请参阅 Apple here 上关于 URL 的官方文档。

编辑

鉴于您正在 return 创建自定义 URL 对象(NSManagedObject 的子类),您需要更改函数的 return 类型。

-> Foundation.URL-> URL。我建议将您的自定义 URL 子类重命名为其他名称,因为此名称已被 Apple 使用并且可能会导致一些名称空间问题(编译器会混淆并且您会收到错误)。