проблема миграции основных данных: storePath не может быть инициирован - PullRequest
0 голосов
/ 13 сентября 2018

Я попытался перенести некоторый код основных данных из 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)
}

В сообщении об ошибке сборки сказано, что «Инициализатор для условного связывания должен иметь необязательный тип, а не« String »».Так что я погуглил и последовал предложению удалить необязательную привязку:

let storePath = storeURL.path { ... }

Тогда у него появилось две новые ошибки в вышеуказанном месте: 1. Невозможно вызвать значение нефункционального типа 'String';2. Переменная, используемая в ее собственном начальном значении

Я полагаю, что приведенные выше коды в основном представляют собой стандартные коды для моделей данных настройки / демонтажа активной зоны.Я новичок, поэтому, пожалуйста, помогите!

1 Ответ

0 голосов
/ 13 сентября 2018

Если вы удалили 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...