Преобразовать строку в элементы массива - PullRequest
0 голосов
/ 22 декабря 2018

Приведенный ниже код создает файл и помещает в него данные, но сохраняет его следующим образом: ["123", "456", "", "789"] Как получить новый item для каждого абзаца?идея заключается в том, что текст песни будет сохранен в файл в зависимости от того, где стихи начинаются и заканчиваются.Я новичок в Swift, так что может быть лучший способ сделать это

@IBOutlet weak var songName: UITextField!
@IBOutlet weak var newLyrics: UITextView!
@IBAction func saveSong(_ sender: Any) {
    let sName = songName.text!
    let fileManager = FileManager.default
    let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
    let path = documentDirectory.appending("/Lyrics/\(sName).plist")
    let lyrics = newLyrics.text.components(separatedBy: "\n\n")
    print(lyrics)
    if let tDocumentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
        let filePath =  tDocumentDirectory.appendingPathComponent("Lyrics")
        if !fileManager.fileExists(atPath: filePath.path) {
            do {
                try fileManager.createDirectory(atPath: filePath.path, withIntermediateDirectories: true, attributes: nil)
            } catch {
                NSLog("Couldn't create document directory")
            }
        }
        NSLog("Document directory is \(filePath)")
    }

    if(!fileManager.fileExists(atPath: path)){
        print(path)

        var lyricArray = [String]()
        lyricArray.append("\(lyrics)")


            // any other key values


        let lyricData = NSArray(array: lyricArray)
        let answer = lyricData.write(toFile: path, atomically: true)
        print("File Created? \(answer)")

    } else {
        print("File Exists")
    }

Я ожидаю, что выход будет

Item0 "123" Item1 "456"

фактический выход

Item0 ["123", "456", "", "789"]

1 Ответ

0 голосов
/ 22 декабря 2018

Вы добавляете описание массива к lyricArray со строковой интерполяцией (\(...)).
Описание массива одна буквенная строка с форматом"[\"item1\", \"item2\"]".

Вы должны добавить содержимое массива

Заменить

lyricArray.append("\(lyrics)")

на

lyricArray.append(contentsOf: lyrics)

или пропустите lyricArray полностью и просто напишите

let lyricData = NSArray(array: lyrics)

или - настоятельно рекомендуется -

do {
    let lyricData = try PropertyListSerialization.data(fromPropertyList: lyrics, format: .xml, options: 0)
} catch { print(error) }

Примечания:

  • Не используйте NSArray для обработки списков свойств в Swift.Используйте PropertyListSerialization.
  • Никогда не печатайте бессмысленные литеральные строки в предложении catch, например Couldn't do that.Напечатайте error.
  • И почему дважды получите путь к папке с документами с другим API (хорошо, сначала путь, а затем URL)?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...