ios - 核心数据迁移问题:storePath无法启动
问题描述
我尝试将一些核心数据代码从 swift 2 迁移到 swift 4。代码如下:
/// Removes the existing model store specfied by the receiver.
///
/// - returns: A tuple value containing a boolean to indicate success and an error object if an error occurred.
public func removeExistingModelStore() -> (success: Bool, error: NSError?) {
var error: NSError?
let fileManager = FileManager.default
if let storePath = storeURL.path {
if fileManager.fileExists(atPath: storePath) {
let success: Bool
do {
try fileManager.removeItem(at: storeURL)
success = true
} catch let error1 as NSError {
error = error1
success = false
}
if !success {
print("*** \(String(describing: CoreDataModel.self)) ERROR: [\(#line)] \(#function) Could not remove model store at url: \(String(describing: error))")
}
return (success, error)
}
}
return (false, nil)
}
构建错误说“条件绑定的初始化程序必须具有可选类型,而不是'字符串'”。所以我用谷歌搜索并遵循删除可选绑定的建议:
let storePath = storeURL.path { ... }
那么上面的地方又出现了两个新的错误: 1. 不能调用非函数类型'String'的值;2.变量在自己的初始值内使用
我相信上面的代码主要是设置/拆卸核心数据模型的样板代码。我是初学者所以请帮助!
解决方案
如果你删除if
了if let
,那么你也必须删除{ }
,你可以试试
public func removeExistingModelStore() -> (success: Bool, error: Error?) {
if FileManager.default.fileExists(atPath: storeURL.path ) {
do {
try FileManager.default.removeItem(at: storeURL)
return (true, nil)
} catch {
return (false, error)
}
}
return (false, nil)
}
推荐阅读
- python - Python 脚本突然从 PC 和 Dropbox 中消失了……?
- java - 为什么 describeConstable 是可选的?
- javascript - 如何使用 ReactJs 通过`props items` 实现`Search box`
- deep-learning - 如何解决 Docker Build 中的 bazel 构建错误?
- redirect - 使用 Microsoft Graph API 为控制台应用设置应用身份验证
- ios - UILabel,带有重划字符的 TextField
- node.js - 使用 aws lambda nodejs 从 SFTP 服务器访问和复制文件
- java - 模拟用户输入的 Junit 测试方法
- php - 编辑评论仅适用于第一条评论
- android - Fileupload 在 pc 浏览器中有效,但在 android webview 中无效