Почему константа данных не инициализируется? - PullRequest
0 голосов
/ 28 января 2019

У меня есть эти строки кода:

let csvFile = Bundle.main.url(forResource: "myFile", withExtension: "csv")!

let dataTable : MLDataTable

do {
  dataTable = try MLDataTable(contentsOf: csvFile)

} catch {
  print(error)
}


let (trainingCSVData, testCSVData) = dataTable.randomSplit(by: 0.8, seed: 0)

У меня есть эта ошибка в последней строке

константа dataTable использовалась до инициализации ...

Что вызывает это?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Поскольку попытка может быть неудачной, переместите назначение в do / catch.Если инициализация не выбрасывает, следующая строка будет выполнена нормально

do {
  dataTable = try MLDataTable(contentsOf: csvFile)
  let (trainingCSVData, testCSVData) = dataTable.randomSplit(by: 0.8, seed: 0)
} catch {
  print(error)
}
0 голосов
/ 28 января 2019

Поместите весь хороший код всегда в область действия do

let csvFile = Bundle.main.url(forResource: "myFile", withExtension: "csv")!
do {
    let dataTable = try MLDataTable(contentsOf: csvFile)
    let (trainingCSVData, testCSVData) = dataTable.randomSplit(by: 0.8, seed: 0)
    // continue
} catch {
    print(error)
}

Однако файл в комплекте приложений не может быть изменен во время выполнения и должен содержать действительные данные

let csvFile = Bundle.main.url(forResource: "myFile", withExtension: "csv")!
let dataTable = try! MLDataTable(contentsOf: csvFile)
let (trainingCSVData, testCSVData) = dataTable.randomSplit(by: 0.8, seed: 0)

Если код дает сбой, вы сделали design error

...