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

时间:2018-06-14 11:56:18

标签: ios swift swift2.3 swift3.2

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

下面是我的编码内容,我正面临一些问题。

  

错误1:无法将String类型的值转换为指定的类型   的NSManagedObjectContext **

     

错误2:无法将URL类型的返回表达式转换为返回类型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是声明处理此问题的单独类:URL_Class

请帮帮我。我对iOS很新。无法理解这种类型的错误。

2 个答案:

答案 0 :(得分:2)

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

应该阅读

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

答案 1 :(得分:0)

错误2:

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

请参阅Apple here上有关网址的官方文档。

修改

当您返回自定义URL对象(NSManagedObject的子类)时,您需要更改函数的返回类型。

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