Я получаю следующее предупреждение:
"Невозможно присвоить значение типа '[String: AnyObject]' типу 'String'"
для следующей строки:
TrueData[counter] = newRow
TrueData
инициализируется как:
var TrueData = [String]()
и newRow
инициализируются как:
var newRow = [String:AnyObject]()
newRow
должно быть AnyObject
, так как я могу хранить его значения в строковом массиве после каждой итерации цикла for (код сортирует файл CSV)?
Вот весь блок кода, как предлагается в комментариях:
func convertCSV(stringData:String) -> [[String:AnyObject]] {
//for date formatting
var importDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = importDateFormat
var TrueData = [String]()
//dateFormatter.timeZone = NSTimeZone(abbreviation: "GMT")
let rows = cleanRows(stringData: stringData)
if rows.count > 0 {
//data = []
//var TrueData = [String: Any]()
var columnTitles:[String] = []
var columnType:[String] = ["NSDate","Int","Int"]
var counter = 0
columnTitles = cleanFields(oldString: rows.first!)
for row in rows{
let fields = cleanFields(oldString: row)
if fields.count != columnTitles.count {continue}
var newRow = [String:AnyObject]()
for index in 1..<fields.count{ let column = columnTitles[index];
let field = fields[index]; switch columnType[index]
{ case "Int": newRow[column] = Int(field) as AnyObject case
"NSDate": guard let newField = dateFormatter.date(from: field)
else { print ("\(field) didn\'t convert");
continue };
newRow[column] = newField as AnyObject default: //default keeps as
string
newRow[column] = field as AnyObject } };
TrueData[counter] = newRow
counter = counter + 1
} }
else { print("No data in file") };
return TrueData };